HOWTO · PowerShell
使用 Robocopy 和參數傳遞的 PowerShell
了解如何從 PowerShell 使用 robocopy 複製檔案和目錄,包括如何將選項作為獨立引數傳遞。
本頁內容
若要在 PowerShell 中複製檔案或目錄,請呼叫 Windows 的 robocopy 工具,並指定來源目錄、目的地目錄,以及所需的檔案選取條件或選項。下方的命令格式說明如何排列這些引數;PowerShell 範例則示範如何將多個選項分開傳遞。
在 PowerShell 中使用 robocopy 命令複製檔案
命令格式為 robocopy <Source> <Destination> [<File(s)>] [<Options>]。來源和目的地都是目錄。選填的檔案選取條件可指定一或多個檔案,也可以使用模式;選項則用來控制複製行為。Robocopy 是 Windows 命令列工具,因此請在可使用 robocopy.exe 的 Windows 上執行命令。
例如,下列命令會將 report.txt 從一個目錄複製到另一個目錄,並隱藏 Robocopy 的作業標頭和作業摘要:
robocopy C:\Work\Source C:\Work\Backup report.txt /njh /njs
請將範例中的路徑和檔名替換為電腦上實際存在的位置。若要複製目錄樹,請省略檔案選取引數,並將選項放在目的地之後。Robocopy 會複製指定目錄中的檔案;可依照所需行為使用 /S 或 /E 等選項,將子目錄納入複製範圍。在將複製結果用於備份或同步工作之前,請確認預期的檔案都已到達,並檢查 Robocopy 的報告。
以下 PowerShell 範例會將各個選項放在陣列中的不同元素,並顯示可透過 splatting 傳入命令呼叫的清單:
$options = @('/njh', '/njs')
"Options passed: $($options -join ', ')"
Options passed: /njh, /njs
在 PowerShell 中呼叫外部程式時,透過 splatting 傳入陣列會將每個元素作為獨立引數傳遞。例如,將 $source、$destination 和 $file 設為預定的路徑與檔名後,呼叫 & robocopy $source $destination $file @options。這個呼叫需要 Windows 和 Robocopy,因此以行內範例呈現,不屬於可跨平台使用的陣列範例。
請避免將多個選項存成單一字串,例如 '/njh /njs':PowerShell 會將該值作為一個引數傳遞。將簡單字串依空格切分,對簡單的開關選項可能可行,但這並不是通用的引數剖析方式。當值包含空格或使用引號時,這種做法可能出錯,因為單靠空白無法判斷引數應如何分組。建議使用陣列,並讓每個元素包含一個完整引數。
您可以將其他開關選項分別加入陣列元素,也可以使用 *.txt 之類的模式來選取檔案。請檢查複製後的檔案,並依據 Robocopy 文件所述的結束代碼意義判讀回報結果;低於 8 表示未回報複製失敗,8 或更高則表示至少發生一項失敗。若要查看選項詳細說明和結束代碼意義,請參閱 Microsoft 的 Robocopy 命令參考。
結論
在 PowerShell 中使用 robocopy 時,請指定來源和目的地目錄,再視需要加入檔案選取條件與選項。若有多個選項,請將它們放入陣列並使用 splatting 傳入,確保每個選項都以獨立引數送達 Robocopy。請確認複製後的檔案,並檢查 Robocopy 回報的結果。