我想让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.lib
到z.lib
)会造成麻烦一个目录......当我将原来命名的文件复制到目录而不是复制重命名的
答案 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)”