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

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\whee.config"

可以用两个命令来完成,例如:

mkdir "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\.."
xcopy "bin\development\whee.config.example" "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\"

通过简单地在目标文件的路径上追加“\..”,如果目标目录还不存在,则创建目标目录。在这种情况下

"c:\mybackup\TestConnectionExternal\bin\Debug\"

的父目录是哪个 不存在的目录

"c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\.."

至少对于WIN7来说,mkdir并不关心目录是否

"c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\"

真的存在。

其他回答

我使用

echo f | xcopy /f /y srcfile destfile

为了绕过它。

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

例如:

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

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

更新:正如@chapluck提到的:

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

我遇到了同样的问题时,试图复制文件与新名称只有当文件不存在的目标或存在(与新名称),但是旧的。解决方案是在目标文件名的末尾添加* char。例子:

xcopy "C:\src\whee.config.txt" "C:\dest\bee.config.txt*" /D /Y

不要用xcopy,用copy代替,它没有这个问题。

Xcopy通常用于执行多个文件/文件夹的递归复制,或者需要它提供的验证/提示特性。对于单个文件副本,copy命令工作得很好。

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

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

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