这看起来非常简单,也许我只是忽略了适当的标志,但是我如何在一个命令中将一个文件从一个目录复制到另一个目录并在目标目录中重命名它呢?这是我的命令:

if exist "bin\development\whee.config.example"
  if not exist "TestConnectionExternal\bin\Debug\whee.config"
    xcopy "bin\development\whee.config.example"
          "TestConnectionExternal\bin\Debug\whee.config"

它每次都会提示我以下内容:

TestConnectionExternal \ bin \调试\哟。配置指定文件名 或目标上的目录名(F =文件,D =目录)?

我想压制这个提示;答案总是F。


当前回答

因为您实际上并没有更改文件名,所以可以从目标文件中取出文件名,这样就不会有问题了。

xcopy bin\development\whee.config.example TestConnectionExternal\bin\Debug\  /Y

当目标目录保证存在时,当源可能同样是一个文件或目录时,这种方法工作得很好。

其他回答

另一种选择是使用目的地通配符。注意,这仅适用于源文件名和目标文件名相同的情况,所以虽然这不能解决OP的特定示例,但我认为值得分享。

例如:

xcopy /y "bin\development\whee.config.example" "TestConnectionExternal\bin\Debug\*" 

将创建文件" wheel .config. conf "的副本。在目标目录中,不提示输入文件或目录。

更新:正如@chapluck提到的:

可以将“*”修改为“[newFileName].*”。它保留文件扩展名,但允许重命名。或者更hack:“[newFileName]。[newExt]*"更改扩展名

所以,有一个简单的解决办法。这是公认的尴尬,但它有效。 如果新文件(文件名)已经存在,xcopy将不会提示查找目标是否为目录或文件。如果在xcopy命令前加上对新文件名的简单回显,它将覆盖空文件。例子

echo.>newfile.txt
xcopy oldfile.txt newfile.txt /Y

因为您实际上并没有更改文件名,所以可以从目标文件中取出文件名,这样就不会有问题了。

xcopy bin\development\whee.config.example TestConnectionExternal\bin\Debug\  /Y

当目标目录保证存在时,当源可能同样是一个文件或目录时,这种方法工作得很好。

对于复制大文件,带/J开关的xopy是一个很好的选择。在本例中,简单地用管道F表示文件或D表示目录。此外,还可以将作业保存在数组中以供将来引用。例如:

$MyScriptBlock = {
    Param ($SOURCE, $DESTINATION) 
    'F' | XCOPY $SOURCE $DESTINATION /J/Y 
    #DESTINATION IS FILE, COPY WITHOUT PROMPT IN DIRECT BUFFER MODE
}
JOBS +=START-JOB -SCRIPTBLOCK $MyScriptBlock -ARGUMENTLIST $SOURCE,$DESTIBNATION
$JOBS | WAIT-JOB | REMOVE-JOB

感谢Chand做了一些修改: https://stackoverflow.com/users/3705330/chand

在目标路径的末尾放置星号(*),跳过D和F的争议。

例子:

xcopy "compressedOutput.xml" ../../执行 脚本/ APIAutomation /图书馆/ rerunlastfailedbuild.xml *”