2012-07-27 49 views
4

我永遠無法得到這個權利。在PowerShell中保留文件夾結構的同時複製文件的正確方法是什麼?

我有一個現有的文件夾c:\MyApps\Websites\MySite已經有一個現有的網站在其中運行。我已經下載了位於c:\temp\MySite\artifacts下的最新位。

,當我嘗試運行此

$source "c:\temp\MySite" 
$destination "c:\MyApps\Websites\MySite" 
copy-item $source $destination -recurse -force 

如果c:\MyApps\Websites\MySite已經存在,那麼它試圖把它c:\MyApps\Websites\MySite\artifacts,但如果它不存在,它正確地將其複製。不知道這裏發生了什麼。有什麼建議麼?

回答

9

只需使用robocopy命令。這是設計這種事情。

robocopy $source $destination /E

它隨Windows 7,所以它是一個內部命令,所以它仍然是一個「Powershell的」的方式,恕我直言,但如果你想使用copy命令,那麼你是非常接近,但是您當前的實施抓取source文件夾並將其放入target(即結果將爲C:\target\source\files,而不是C:\target\files)。當你想的target模樣source裏面裏面,你需要做的:

cp C:\source\* C:\target -r -fo

通知的*,這抓住內容source文件夾的。如果您想要首先清除target,則只需在複製之前執行rm -r -fo C:\target\*即可。

Powershell不處理長路徑,因此如果您有長文件名或深度文件夾,則無論如何您都需要使用robocopy。

+0

這不同步文件夾呢?換句話說,如果文件存在於目標目錄中,但不是源目錄,它會刪除它們嗎? – Micah 2012-07-27 20:47:18

+1

@Micah要刪除目標中不在源代碼中的東西,必須發出'/ PURGE'標誌。另外,'/ MIR'相當於'/ E/PURGE'。您可以通過發佈'robocopy /?'查看更多信息。 – SpellingD 2012-07-27 20:52:47

+0

Holy sh * tballs Robocopy!你去過哪裏?我是upvoting的答案,因爲它是真棒,但我仍然想知道如何做到這一點powershell的方式.. – Micah 2012-07-27 20:56:57

相關問題