iT邦幫忙

DAY 30
3

強而有力的 Windows PowerShell系列 第 30

使用 Windows PowerShell 複製檔案和資料夾

這次說明用 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")

最後要提醒大家,就是進行上述的複製操作,請確認對來源與目的資料夾或檔案要有權限才行哦!


上一篇
使用 Windows PowerShell 建立與移除檔案和資料夾
下一篇
使用 Windows PowerShell 顯示彈出式的對話視窗
系列文
強而有力的 Windows PowerShell33

1 則留言

0

技術性文章是比較Close的,推一下!

我要留言

立即登入留言