2011-03-03 55 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

相關問題