XCOPY切换到创build指定的目录如果不存在?

我在后生成事件中使用XCOPY将编译的DLL从其输出文件夹复制到主应用程序的输出文件夹。 DLL正被复制到主应用程序输出文件夹中的“模块”子文件夹中,如下所示:

xcopy "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\" 

如果Modules文件夹存在,该命令可以正常工作,但是在testing过程中我发现如果该文件夹不存在,XCOPY不会创build它,并且命令失败。

是否有一个XCOPY开关,将导致文件夹被创build,如果它不存在? 如果没有,我会添加到我的后生成事件来创build文件夹,如果它不存在? 谢谢你的帮助。

我试图在命令行上使用

 D:\>xcopy myfile.dat xcopytest\test\ 

目标目录已经正确创build。

如果不是的话,你可以使用mkdir命令来创build目标目录,并启用cmd的命令扩展

 cmd /x /c mkdir "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\" 

('/ x'启用命令扩展,以防系统默认启用,我不熟悉cmd

使用

 cmd /? mkdir /? xcopy /? 

了解更多信息 :)

回答使用“/我”正在工作,但有一点小把戏 – 在目标你必须以字符\告诉xcopy目标是目录,而不是文件!

例:

 xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)_DropFolder" /F /R /Y /I 

不起作用并返回代码2,但这一个:

 xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)_DropFolder\" /F /R /Y /I 

我的示例中使用的命令行参数:

/ F – 显示完整的源文件名和目标文件名

/ R – 这将覆盖只读文件

/ Y – 禁止提示覆盖现有文件(s)

/我 – 假设目的地是目录(但必须以\结尾)

我讨厌PostBuild步骤,它允许在构build工具的权限之外发生太多的事情。 我相信最好让MSBuildpipe理复制过程,并进行更新。 您可以像这样编辑.csproj文件:

  <Target Name="AfterBuild" Inputs="$(TargetPath)\**"> <Copy SourceFiles="$(TargetPath)\**" DestinationFiles="$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\**" OverwriteReadOnlyFiles="true"></Copy> </Target> 

将/ i与xcopy一起使用,如果目录不存在,它将为您创build目录。

你可以使用robocopy:

 robocopy "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules" /E 

尝试/ E

要获得完整的选项列表:xcopy /?