Windows 批次修改檔案名稱的方法 (Batch Rename Files)
2021-07-19
教學如何使 CMD 批次修改檔案名稱,並在修改上保有檔案的名稱設定彈性。同時過程中也會說明如何取得資料夾中所有檔案的名稱與路徑,如何產生連續的數字、隨機的 GUID 並儲存於 Clipboard 之中,最後則是如何將檔案從巢狀關係抽出集中到單一路徑 😎
說明
切換目錄與觀察資料夾結構
cd c:\temp
tree /F
複製檔案路徑
複製後存入 clipboard 中,藉由這個方法也可以將資料夾下的路徑名稱複製到 Clipboard,在需要羅列資料夾檔案名稱的使用情境非常實用 😋
dir /b /s *.pdf | clip
緊急追加!嘗試使用 Powershell 搭配 Pipeline 完成所有的動作,不需要再另外使用 VSCode。但這個方法沒有辦法彈性的編輯彈性較受到限制,適合精簡或是做為伺服器批次腳本的使用情境
下列的方法是先找出資料中所有符合的檔案,並且複製到同樣的位置。
Set-Location C:Temp
Get-ChildItem *.pdf -r | % {$_.fullname} | Copy-Item -Destination C:\Temp\Dest
dir 為 Get-ChildItem 的 alias,下列的方法是先製造 copy script string 再交由 Invoke-Expression 解讀執行。
dir *.pdf -r
| % {'copy ' + $_.FullName + ' ' + (new-guid).guid + '.pdf'}
| Invoke-Expression
編輯名稱調整規則
使用 Visual Studio Code 或者方便的編輯工具。
Alt + Shift + I
在每行語法後面加入目標路徑與名稱,並在每行首加入 copy。
示範
示範將原本樹狀資料夾中的檔案複製到根目錄中,而因為有部分檔案名稱會重複,所以對目標檔案名稱做統一的命名,可以使用 powershell 來取得命名規律,例如流水號 1 到 9:
Sequence Number
1..9 | clip
# 1
Guid
或者 9 組 GUID
1..9 | % {(new-guid).Guid} | clip
# f6599d0b-6e3d-46a8-8b45-6e2221145d6e
Interpolation
要取回傳入的參數使用 $_
1..9 | % { "file_$_.pdf}" }
# file_1.pdf
以下以 Sequence Number 示範 😀
完成後的指令如下:
copy C:\Temp\document.pdf 1.pdf
copy C:\Temp\document2.pdf 2.pdf
copy C:\Temp\business\document.pdf 3.pdf
copy C:\Temp\business\document2.pdf 4.pdf
copy C:\Temp\business\account\document.pdf 5.pdf
copy C:\Temp\business\account\papers.pdf 6.pdf
copy C:\Temp\business\account\reports.pdf 7.pdf
copy C:\Temp\business\finance\document.pdf 8.pdf
copy C:\Temp\business\finance\attach\images.pdf 9.pdf
貼到 Command Line 執行就可以完成批次的檔案重新命名 😊