VS 2012:Post Build xcopy错误2

时间:2012-12-23 21:15:47

标签: visual-studio msbuild visual-studio-2012 xcopy post-build-event

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

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

但是,点击“构建”后,我没有复制过程失败,而是收到以下错误:

  

错误MSB3073:命令“如果存在   C:\ Users \ Incubbus \ Documents \ Visual Studio 2010 \ My   Libraries \ MyNetWorkProject \ Debug \ IncNetworkLibD.lib xcopy   “C:\ Users \ Incubbus \ Documents \ Visual Studio 2010 \ My   图书馆\ MyNetWorkProject \调试\ IncNetworkLibD.lib”   “C:\ Users \ Incubbus \ Documents \ Visual Studio 2010 \ My Libraries \ z.lib”/ Y

     

:VCEnd“退出代码2。

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

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

部分解决方案:

编辑:当xcopy询问这是文件还是文件时,看起来重命名部分(Inc.libz.lib)会造成麻烦一个目录......当我将原来命名的文件复制到目录而不是复制重命名的

时,它就可以工作

3 个答案:

答案 0 :(得分:34)

Xcopy documentation说以下内容:

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

Does destination specify a file name 
or directory name on the target 
(F = file, D = directory)? 

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

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

你需要相反,但没有这样的转换。

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

建议使用xcopy前缀添加echo f |命令,基本上执行以下操作:它模拟用户在f询问时按xcopy键。

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

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

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

<强>更新 作为Govert points out,这个hack将无法在Windows的本地化版本下运行。 但是,另一个黑客会起作用:

xcopy D:\file.zip c:\renamedFile.zip*

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

答案 1 :(得分:9)

为什么不使用复制而不是xcopy? copy专门用于文件,因此不会产生混淆。

答案 2 :(得分:1)

您是否尝试将$(TargetPath)包装在引号中?那些不太受欢迎的空间角色 - 而不是全部 - 高分辨率的MS产品往往会在每个角落搞砸了......不知道为什么那些dumbos继续这么做......

像这样:如果存在“$(TargetPath)”

相关问题