這次說明用 Windows PowerShell 複製檔案和資料夾。
強而有力的 Windows PowerShell 系列文章列表如下:
http://ithelp.ithome.com.tw/event/ironmanarticle2/id/20005121
使用 Copy-Item cmdlet 可複製項目,例如下面的命令會將使用者暫時目錄中的 file.txt 複製成 file.bak:
# 檢查檔案是否已經存在
if (!(Test-Path -Path $env:Temp\file.txt)) {
# 建立檔案
New-Item -Path $env:Temp\file.txt -ItemType "file"
}
# 複製檔案
Copy-Item -Path $env:Temp\file.txt -Destination $env:temp\file.bak
如果目的檔已經存在,複製就會失敗。因此若要覆寫原本已存在的目的檔,要加上 Force 參數。使用這個參數還有一個用途,就是當目的檔是唯讀的時候,也能順利執行複製檔案的作業:
Copy-Item -Path $env:Temp\file.sys -Destination $env:Temp\file.bak -Force
如果是要複製資料夾,可以依樣畫葫蘆。以下面的命令來說,會將使用者暫時目錄中的 New Folder 資料夾以遞迴的方式,複製到使用者暫時目錄中的 DeleteMe 這個新資料夾裡。即使目的資料夾(以這個範例來說,就是 DeleteMe)不存在,也會先建立該資料夾,然後再複製檔案:
# 檢查目錄是否已經存在
if (!(Test-Path -Path "$env:Temp\New Folder")) {
# 建立目錄
New-Item -Path "$env:Temp\New Folder" -ItemType "directory"
}
# 建立 10 個檔案
1..10 | ForEach-Object -Process {`
New-Item -Path "$env:Temp\New Folder\file$_.txt" -ItemType "file"}
# 複製檔案
Copy-Item "$env:Temp\New Folder" -Recurse $env:Temp\DeleteMe
如果只要複製特定的檔案也行,例如下面的命令會從使用者暫時目錄中,逐層找出 .txt 檔案,將它們全部複製到 C:\temp\text:
Copy-Item -Path $env:Temp -Filter *.txt -Recurse -Destination C:\temp\text
在「Windows PowerShell 基本操作 - 執行 Windows 的程式」提到:在 Windows PowerShell 中也可執行 Windows 的指令,所以您仍可使用其他工具來執行檔案系統複製的作業。比方說,Windows PowerShell 能夠使用 XCOPY、ROBOCOPY 以及 Scripting.FileSystemObject 的 COM 物件。
以下面的程式碼來說,就會使用 Windows Script Host 的 Scripting.FileSystem COM 類別,呼叫 CopyFile 方法將使用者暫時目錄中的 file.txt 複製成 file.bak:
(New-Object -ComObject Scripting.FileSystemObject).CopyFile("$env:Temp\file.txt", "$env:temp\file.bak")
最後要提醒大家,就是進行上述的複製操作,請確認對來源與目的資料夾或檔案要有權限才行哦!