2011-03-03 53 views
59

我在后生成事件中使用XCOPY将编译的DLL从其输出文件夹复制到主应用程序的输出文件夹。这些DLL被复制到“模块”子文件夹中的主要应用程序的输出文件夹,如:XCOPY切换到创建指定的目录,如果它不存在?

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

命令工作正常,如果模块文件夹存在,但我测试,如果文件夹没有按期间发现”如果存在,XCOPY不会创建它,并且命令失败。

是否有XCOPY开关会导致文件夹被创建,如果它不存在?如果不是,如果它不存在,我将添加到我的后构建事件中以创建该文件夹?谢谢你的帮助。

+0

见我的评论以接受的答案 – 2011-03-16 17:56:54

回答

40

这个我试过用

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

在命令行和目标目录正确创建。

如果没有,你可以使用mkdir命令cmd/X”的命令扩展像

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

(启用“创建目标目录,启动命令扩展的情况下,他们在默认情况下不上启用系统,我没那么熟悉cmd

使用

cmd /? 
mkdir /? 
xcopy /? 

进一步的Infor mation :)

+10

我接受了这个答案,因为第一部分证明是正确的。 XCOPY *将*创建目录,如果它尚不存在。我发现Windows试图要求我的XCOPY命令覆盖确认。 VS不允许这样做,所以它退出Code 2。我添加了/ y参数,它抑制了提示,并且命令起作用。通过清洁解决方案并删除文件夹进行测试,然后重新进行测试。文件夹由XCOPY创建。 – 2011-03-03 16:41:56

+0

@DavidVeeneman这不适用于Windows 10下的VS2015; xcopy错误消息“错误:路径无效”。所以不行。 XCOPY _will not_(总是)创建目标目录 – 2016-10-10 12:15:38

+1

XCOPY将创建一个目录,但它只能这样做,如果没有歧义: 这是模棱两可: d:\> XCOPY MYFILE.DAT xcopytest \测试 这不是: D:\> xcopy myfile.dat xcopytest \ test \ (注意最后一个'\') – azog 2017-12-01 10:19:47

0

尝试/ E

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

+0

谢谢,但/ e用于复制源中的现有子目录结构。我将源根目录中的文件复制到目标中的新子目录。 – 2011-03-03 15:54:52

13

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

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

我认为你的Inputs,SourceFiles和DestinationFiles是不正确的。他正在将DDL复制到模块文件夹,而不是相反。 – 2011-03-03 02:23:56

+0

啊,谢谢。纠正。 – 2011-03-03 02:29:04

+0

无论如何,我会将它们添加到属性组。 – 2011-03-03 02:30:34

6

你可以使用ROBOCOPY:

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

+1:我不知道在Vista和Win7中可用的robocopy命令。谢谢。不过,不要认为它会在这里工作。我正在复制一个文件,而不是一个文件夹。 – 2011-03-03 15:47:04

+0

我也不知道robocopy。很高兴知道,但不幸的是,如果复制到程序文件下的文件夹,它将失败并显示“访问被拒绝”消息。 (xcopy对此没有任何问题。) – 2016-10-07 18:36:28

+0

经过进一步研究,xcopy似乎很乐意将新文件复制到Program Files下的现有文件夹中,但显然无法创建新文件夹(无管理员权限) 。 – 2016-10-07 18:46:40

14

使用/ I与XCOPY,如果该目录不存在,将创建目录 为您。

96

使用答案“/ I”正在工作,但有一点小技巧 - 在目标中,您必须以字符结尾\告诉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)

/I - 假定目标是目录(但必须与\结束)

+3

如果阐述为什么使用'/ F',为什么'/ R',为什么'/ Y',答案应该更有用。在我的情况下,'/ Y'解决了这个问题,未来的读者将从知道为什么没有数据挖掘互联网中获益。 – 2013-06-18 19:36:01

+0

如果我需要创建两个目录,该怎么办? xcopy可以帮我吗? – Pedro77 2013-10-04 11:54:12

+3

http://www.computerhope.com/xcopyhlp.htm。这将有助于这些命令。 – Roylee 2013-11-11 09:21:53

相关问题