Windows 批次更改檔名

在 D:/test 資料夾下有幾個檔案,想要更改檔名

檔案總管

全選 → 滑鼠右鍵 → 重新命名

系統會自動為同樣名稱的檔案加上編號

@Echo Off&;SetLocal ENABLEDELAYEDEXPANSION
FOR %%a in (*) do (
    set "name=%%a"
    set "name=!name: (=!"
    set "name=!name:)=!"
    ren "%%a" "!name!"
)

將以上程式存為 .bat,放入資料夾中並執行
就可以去除括號

命令提示字元 CMD

使用 RENAME 指令 ren old_name new_name

ren * b?.log

PowerShell

使用 PowerShell 就可以有近似程式語言的字串處理功能

# 原始字串
$_.Name
$_.BaseName

# 副檔名
$_.Extension

# 字串長度
$_.Name.Length

# 字串拼接
"abc" + $_.Name

# 擷取字串,自4至末尾
$_.Name.Substring(4)

# 擷取字串,自0至4
$_.Name.Substring(0,4)

# 分隔成陣列
-Split("_")

# 分隔後的陣列順序調整
($_.BaseName -Split("_"))[1,0]

# 陣列拼接
-Join("_")

# 取代
-replace "old", "new"

($_.BaseName -Split("_"))[1,0] -Join("-")
# 取代字串
Dir | Rename-Item -NewName { $_.name -replace "old", "new" }

# 擷取字串
Dir | Rename-Item -NewName { $_.Name.Substring(0,4) + $_.Extension }

# 自動編號
Dir *.jpg | %{ Rename-Item $_ -NewName ("new-name-{0}.jpg" -f $c++) }

# 起始編號
$c=123; Dir *.jpg | %{ Rename-Item $_ -NewName ("new-name-{0}.jpg" -f $c++) }

# 自動編號,補0
Dir *.jpg | %{ Rename-Item $_ -NewName ("new-name-{0:000}.jpg" -f $c++) }

# 改副檔名
Dir *.jpg | Rename-Item -NewName { [io.path]::ChangeExtension($_.name, "jpeg") }

找出所有檔名包含某字串的檔案,並替換成新字串

Get-ChildItem *.jpg -Filter "*old*" | ForEach {
    Rename-Item $_ -NewName $_.Name.Replace("old", "new")
}

找出所有副檔名為 .log 的檔案,並將副檔名改為 .jpg

Get-ChildItem *.log | Rename-Item -NewName {
    [System.IO.Path]::ChangeExtension($_.Name, ".jpg")
}

找出所有副檔名為 .jpg 的檔案,並重新命名為 image_編號.jpg

Get-ChildItem *.jpg | ForEach-Object -Begin {
    $count = 1
} -Process {
    Rename-Item $_ -NewName "image_$count.jpg"
    $count++
}

軟體工具

一般叫做 renamer,市面上有很多選擇
功能大同小異,都很輕量,可依自己喜好選擇

  • Advanced Renamer
  • Ant Renamer
  • Flexible Renamer
  • KenRename