2014-12-05 99 views
8

從批處理文件切換到PowerShell腳本的原因是爲了改進過程的錯誤檢查。在這方面複製cmdlet是否有優勢?PowerShell使用xcopy,robocopy或複製項

如果一個批處理文件已經存在,它使用xcopy按文件名單獨複製文件,將語法轉換爲copy-item有什麼好處嗎?

使用robocopy,xcopy和copy-item(相互比較)有什麼優勢?例如,robocopy在通過可靠網絡處理大量小文件時具有優勢。如果要在數百臺計算機上同時運行此腳本,以便將數百個文件複製到每個計算機上,這些文件會影響決策?決定應該主要集中在文件的權限上嗎?

+2

完全取決於你想做什麼。您錯過了列表中的Robocopy。 – 2014-12-05 21:26:28

+0

這個過於寬泛。我們不知道你在移動什麼,多少。有很多不同之處,你幾乎總是希望在批處理作業的基本副本項目上使用xcopy/robocopy。 – Matt 2014-12-05 21:31:54

+0

儘管標題不明確,但帖子相當明顯地詢問他是否應將其現有批處理文件中的'xcopy '轉換爲PS本機'Copy-Item' cmdlet,或者將其保留原樣。我們確實需要更多信息,但我覺得這個評論和反對票過於苛刻。 – TheMadTechnician 2014-12-05 21:38:22

回答

6

主要優點是您可以通過管道而不是字符串或文件規格將對象發送到Copy-Item。所以,你可以這樣做:

Get-ChildItem '\\fileserver\photos\*.jpeg' -File | ` 
    Where-Object { ($_.LastAccessTime -ge (Get-Date).AddDays(-1)) -and ($_.Length -le 500000) } | ` 
    Copy-Item -Destination '\\webserver\photos\' 

這是怎樣的一個壞榜樣的(你可以做到這一點與Copy-Item -Filter),但它是一個容易拿出上的動態。在處理文件時最常見的是Get-ChildItem,而我個人傾向於這麼做的原因很多,僅僅是因爲Remove-Item-Recurse -Include錯誤。

您還可以獲得PowerShell的錯誤捕獲,特殊參數如-Passthru,-WhatIf,-UseTransaction以及所有常見參數。 Copy-Item -Recurse可以複製一些xcopy的樹的複製能力,但它是相當簡單的。現在

,如果你需要維護的ACL,所有權,審覈,等等,然後xcopyrobocopy可能會因爲該功能內置於容易得多。我不知道Copy-Item手柄如何複製加密的文件到非加密位置(xcopy有一些這樣做的能力),我不相信Copy-Item支持直接管理存檔屬性。

如果你正在尋找速度,那麼我會懷疑xcopy和robocopy會勝出。託管代碼的總體開銷較高。 Xcopy和robocopy還可以更好地控制他們在網絡中的工作情況。

+0

我最終選擇的解決方案是讀取要從文本文件複製的文件列表,並將它們傳送到Copy-Item。這種方法的工作非常一致,即使將它們傳遞給我的自定義函數以用於註冊DLL等任何內容。 – Adam 2014-12-17 03:03:09

+1

即使在Posh v5中,Remove-item的bug仍然不固定。 MS站點說:「當它與Include參數一起使用時,Recurse參數可能不會刪除所有子目錄或所有子項目。這是一個已知的問題;作爲解決方法,請嘗試將Get-ChildItem -Recurse cmdlet的結果管道化到Remove-Item cmdlet中,如本主題中的示例4中所述「。https://technet.microsoft.com/zh-cn/library/hh849765。 ASPX – AnneTheAgile 2015-02-22 20:28:24