我想让 VS 将构建过程后创建的 .lib 文件复制到特定文件夹。 所以我进入项目配置、构建后事件,并输入以下命令:
if exist $(TargetPath)
xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y
但是,在我单击“构建”后,该过程并没有复制,而是失败了,并且收到以下错误:
error MSB3073: The command "if exist 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" exited with code 2.
我还想知道错误消息的命令字符串中的 :VCEnd
<- 也许这就是原因?如何解决这个问题?
任何帮助和提示都会很高兴:)...
部分解决方案:
编辑:看起来重命名部分(Inc.lib
到z.lib
)会带来麻烦,当 xcopy 询问这是文件还是目录时...当我只是将原始命名的文件复制到目录而不是复制重命名时,它就可以工作
最佳答案
指定目标是文件还是目录 如果目标不包含现有目录且不以反斜杠 (\) 结尾,则会显示以下消息:
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
Operator |
只是将 echo f
(== f
) 的输出通过管道传输到 xcopy
命令中,并且它在适当的时候阅读。有关输出重定向的更多信息,请参见:http://ss64.com/nt/syntax-redirection.html .
更新: 作为戈弗特points out ,此 hack 在本地化版本的 Windows 下不起作用。 然而,另一个黑客将起作用:
xcopy D:\file.zip c:\renamedFile.zip*
在目标文件名后附加星号*
使xcopy不会询问目标是文件还是目录。
关于visual-studio - VS 2012 : Post Build xcopy error 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14014763/