VS 2012:Post Build xcopy错误2

Inc*_*bus 18 msbuild xcopy post-build-event visual-studio visual-studio-2012

我想让VS将构建过程后创建的.lib文件复制到特定文件夹.所以我去了项目配置,后期构建事件,并输入以下命令:

if exist $(TargetPath)
xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y
Run Code Online (Sandbox Code Playgroud)

但是,在点击"构建"后,我没有收到复制过程,而是收到以下错误:

错误MSB3073:命令"如果存在C:\ Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib xcopy"C:\ Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib""C:\ Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib"/ Y

:VCEnd"退出代码2.

我也想知道:VCEnd错误信息的命令字符串< - 也许这就是原因?如何解决这个问题?

任何帮助和提示都会被愉快地消耗掉:)

部分解决方案

编辑:当xcopy询问这是一个文件还是一个目录时,它看起来像重命名部分(Inc.libto z.lib)造成麻烦...当我只是将原来命名的文件复制到一个目录而不是复制重命名时,它可以正常工作

Iar*_*ica 35

Xcopy文档说明如下:

指定Destination是文件还是目录如果Destination不包含现有目录且不以反斜杠(\)结尾,则会显示以下消息:

Does destination specify a file name 
or directory name on the target 
(F = file, D = directory)? 
Run Code Online (Sandbox Code Playgroud)

如果要将文件复制到文件,请按F. 如果要将文件或文件复制到目录,请按D.

您可以使用/ i命令行选项来抑制此消息,xcopy如果源是多个文件或目录,则会导致假定目标是目录.

你需要相反,但没有这样的开关.

这里提出了解决方案:https://stackoverflow.com/a/4283533/532647.

建议在xcopy命令前加上echo f |前缀,它基本上执行以下操作:它模拟用户fxcopy请求时按键.

所以你的命令应该是这样的:

if exist $(TargetPath)
echo f | xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y
Run Code Online (Sandbox Code Playgroud)

运算符|只是将echo f(== f)的输出传递给xcopy命令,并在适当时读取它.有关输出重定向的更多信息,请访问:http://ss64.com/nt/syntax-redirection.html.

更新: 正如Govert所指出的,这种黑客攻击不适用于Windows的本地化版本.但是,另一个黑客将工作:

xcopy D:\file.zip c:\renamedFile.zip*
Run Code Online (Sandbox Code Playgroud)

使用星号附加目标文件名*使xcopy无法询问目标是文件还是目录.

  • 这在Windows的本地化版本下不起作用,其中提示词可能不同.另一个技巧是在目标末尾添加星号'*',然后xcopy将不会提示文件/目录. (13认同)

use*_*954 9

为什么不使用copy而不是xcopy?copy专门针对文件,因此不会产生混淆.