在 Windows 中更改大量檔案名稱,批次修改檔名,快速又省力!

Windows 其實內建許多可以更改大量檔案名稱的方法,有時候熟悉這些小技巧可以節省您很多時間。

有時候我們會從網路上下載許多圖片與檔案,通常檔案的名稱也是亂七八糟的,為了讓檔案看起更整齊,我們通常會將同一系列的檔案重新依照自己的規則來命名,但是如果檔案數量很多時,要手動更改每個檔案的名稱也是很累的。

所幸在 Windows 中本身就有內建一些更改大量檔案名稱的功能,只是一般人不曉得如何使用,以下分別介紹以檔案總管、命列提示字元與 PowerShell 的改檔名方法。

檔案總管

檔案總管是一個最方便的工具,不需要學習任何指令即可使用,不過功能就比較陽春,以下是使用檔案總管更改多個檔案名稱的步驟。

Step 1
首先開啟檔案總管,找到要更改檔名的檔案。

windows-rename-files-1

Step 2
選取要更改檔名的檔案。

windows-rename-files-2

Step 3
在第一個檔案上按下右鍵,選擇「重新命名」。

windows-rename-files-3

Step 4
輸入新的檔名。

windows-rename-files-4

Step 5
輸入完之後,按下 Enter 鍵。

windows-rename-files-5

Step 6
這樣檔案總管就會將所有選取的檔案重新命名為指定的檔案名稱,並且依照原本的順序編號。

windows-rename-files-6

命令提示字元

在 Windows 的命令提示字元之中,我們可以使用 renameren 指令配合萬用字元(*)來一次更改多的檔案的檔名。

Step 1
若要開啟命令提示字元重新命名檔案,可以按著 Shift 鍵,並在資料夾的空白處點選滑鼠右鍵,選擇「在此處開啟命令式窗」。

open-command-window-here

Step 2
使用 renameren 指令批次更改檔案名稱,最常見的使用方式就是更改副檔名:

ren *.html *.txt

command-window-1

Step 3
這樣就完成了。

windows-rename-files-7

PowerShell

Windows 的 PowerShell 的功能比命令提示字元還要強大,他可以使用管(pipe)的功能將多個指令結合起來使用,就像在 Linux shell 中一樣。

假設我沒有一些檔案,檔名中包含許多空白,以下示範將所有檔案名稱中的空白字元置換為減號(-)。

windows-rename-files-8

Step 1
在主選單中找到 Windows PowerShell,並開啟它。

windows-powershell-1

Windows 主選單

Step 2
切換至檔案所在目錄後,使用 Dir 指令將所有的檔案名稱列出來,然後交給 Rename-Item 指令進行更改檔名的動作。

Dir | Rename-Item -NewName { $_.name -replace " ", "-" }
windows-powershell-2

PowerShell 視窗

Step 3
這樣就完成了。

windows-rename-files-9

以下補充一些比較複雜的 PowerShell 範例。

這一個是把所有的 jpg 圖檔重新命名為 image_編號.jpg,而編號的起始數字可以自己設定:

# 把所有的 JPG 檔案重新命名為 image_編號.jpg
Get-ChildItem *.jpg | ForEach-Object -Begin {
  $count = 1
} -Process {
  Rename-Item $_ -NewName "image_$count.jpg"
  $count++
}

這一段指令是將所有的 *.jpeg 檔案的副檔名改為 jpg,讓副檔名規則統一:

# 將所有 *.jpeg 檔案的副檔名改為 jpg
Get-ChildItem *.jpeg | Rename-Item -NewName {
  [System.IO.Path]::ChangeExtension($_.Name, ".jpg")
}

這一段指令稿是從所有的 *.jpg 檔案中,找出含有 oldstring 字眼的檔案,然後把 oldstring 這個字眼全部改為 newstring

# 從所有的 *.jpg 檔案中,找出含有 oldstring 字眼的檔案,
# 把 oldstring 改為 newstring
Get-ChildItem *.jpg -Filter "*oldstring*" | ForEach {
  Rename-Item $_ -NewName $_.Name.Replace("oldstring","newstring")
}

事實上 Windows 的 PowerShell 的功能不只這些,它提供了豐富的控制與自動化的系統管理能力,若您對於 PowerShell 有興趣,可以參考微軟官方的教學文件

參考資料:HTG

Windows

14 留言

  1. VV

    超簡單的,謝謝你了

  2. 請問若是要改成
    gtwang_1
    gtwang_2
    gtwang_3
    Dir 指令該如何寫?

    • 達達的馬蹄

      u can use
      Dir | Rename-Item -NewName { $_.name –replace ” “, “_” } 將”空白”用”_”取代

  3. FYLIU

    太棒了,非常謝謝您!

  4. 真是實用,謝謝您!

  5. Peter

    如果要從一些既有檔名中,更改/置換前面固定位元的編號,而且有指定開始值,比如說從004開始編,請問指令要怎麼下?
    現有檔名:
    001 abc.mp3
    002 bbe.mp3
    003 xsese.mp3

    要加入改名的新的檔案:
    xxx032asdf.mp3
    xxx009adfadaw.mp3
    xxx023dfaveae.mp3
    xxx038adfadfefoiu.mp3
    xxx102dfaaoie.mp3
    …..

    感謝

  6. Mr.光

    請問一下為何我無法使用Windows PowerShell修改?
    由於一開始我用自己的檔名也顯示如此,
    後來我就連自己資料夾名稱也改成上圖那個,
    我是想把從新排序後所產生的括弧拿掉,
    指令為:
    PS C:\Users\wonderful907> RenameFiles> Dir | Rename-Item -NewName { $_.name -replace ” ()”, “” }
    我都照著上圖的步驟了卻顯示錯誤:
    無法辨識 ‘\RenameFiles>’ 詞彙是否為 Cmdlet、函數、指令檔或可執行程式的名稱。請檢查名稱拼字是否正確,如果包含路徑的話,請確認路徑是否正確,然後再試一次。
    位於 行:1 字元:14
    + \RenameFiles> <<<:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
    請問一下到底是哪邊出問題?
    路徑跟拼字都正確阿...

  7. ANGFEN

    DEAR SIRS:
    如何取代 ( 括號

  8. Andrew

    您好,
    如果要改_前的編號要怎麽做?
    例如我想把00000006_03535.bmp 改成000000008_03535.bmp

    • ss

      今天剛好用到:
      Get-ChildItem *.bmp | Rename-Item -NewName { $_.Name -replace ‘00000006_’,’000000008_’ }
      哈請試試

  9. 讚美你的路人甲

    非常棒~ 謝謝老大

  10. TSUI

    請問一下如前面file name不改動只在所有file後面增加-XAP.pdf, 可如何改動.

  11. Chiaying

    感謝您的教學。

  12. 高山

    請問您
    如何用PowerShell保留原有檔案名稱
    在檔案前自動編碼

Comments are Closed