檔案批次重新命名工具
前後綴、序號、尋找替換、大小寫、副檔名一站搞定,全部在瀏覽器本地處理
拖曳檔案到這裡,或點擊下方按鈕
支援任意類型與數量的檔案,僅在你的瀏覽器中處理,不會上傳
什麼是檔案批次重新命名?
檔案批次重新命名是把一組檔案依規則一次改名的操作。常見場景:相機匯出後的 IMG_1234.JPG 想改成 2026-06-旅行-001.jpg、UI 切圖想統一加 @2x_、報銷單據想依發票日期順序編號。macOS Finder 內建的重新命名雖然支援「尋找與取代」和「名稱+計數器」格式,但不能修改副檔名;Windows 檔案總管只支援簡單的連續序號(PowerToys 的 PowerRename 雖支援正則但需另外安裝);複雜場景往往要靠 ReNamer、Bulk Rename Utility 等本機軟體,或自己寫 PowerShell / shell 腳本。本工具把這些規則——前後綴、序號、尋找替換、大小寫、副檔名——拆成可視化選項,搭配即時預覽和重名偵測,一次確認結果再下載。整個流程都在瀏覽器記憶體中完成,含專案代號、客戶名稱、個人證件名的檔案名也不會離開你的電腦。
使用方法
操作步驟
- 把要改名的檔案拖入上傳區,或點擊「選擇檔案」從硬碟選擇,多次新增會追加到清單
- 如需調整順序,點清單裡的「依名稱/依大小」排序,或用每列的上下箭頭微調
- 在三張設定卡裡設定規則:前後綴、尋找替換、序號、大小寫、副檔名
- 右側「新檔名」會即時變化,藍色表示與原名不同,紅色表示與其他檔案重名
- 確認無誤後點「下載此檔案」單獨儲存,或「打包下載 ZIP」一次拿走全部
規則套用順序
- 先用「替換為統一名稱」覆蓋原名(留空則保留),適合「不管原名是什麼,全部統一為 photo + 序號」這類場景
- 然後執行「尋找/替換」,僅作用於基礎名,不影響副檔名
- 接著插入序號,可放在最前、最後或完全替換基礎名
- 再加上前綴和後綴,包裹在最外層
- 最後做大小寫轉換和副檔名處理,副檔名獨立於基礎名變換
使用場景
技術原理
整個工具基於瀏覽器的 File API、Blob 和 URL.createObjectURL 實作,所有資料流轉都在記憶體中完成。使用者拖曳或選擇檔案後,瀏覽器把檔案以 File 物件(繼承自 Blob)保存在 JavaScript 堆中,工具只讀取每個檔案的 name 屬性參與重新命名計算,檔案二進位內容(content)保持不變。 重新命名規則依固定順序套用,避免規則互相干擾:先確定基礎名(使用者指定或原檔 base),按 lastIndexOf('.') 把副檔名拆出(首字元為 . 的隱藏檔如 .gitignore 不視為副檔名);然後執行字串 split-join 的尋找替換(不使用正規表達式,避免特殊字元意外觸發比對);接著按零索引 index 計算序號 `String(start + i).padStart(pad, '0')`,序號可作前綴、後綴或完全替換基礎名;再串接前綴和後綴;之後對整個「前綴+基礎名+後綴」一併做大小寫轉換;最後獨立處理副檔名(保持/大寫/小寫/替換)。 重名偵測用一個 Map<string, number> 在預覽時統計每個新檔名的出現次數,超過 1 次的進入 duplicateSet,UI 上以紅色標記。當 duplicateSet 不為空時點擊「打包下載 ZIP」會彈出錯誤 Toast 並中止打包,但原始檔案清單會被保留——調整規則後可以直接再試。這一步在 useMemo 內進行,依賴 [files, opts],規則修改時增量重算,不會因為檔案多而卡頓。 單檔下載使用 URL.createObjectURL(file) 產生一次性 blob URL,寫入暫時 `<a download>` 元素並觸發 click,立即 revokeObjectURL 釋放。打包下載用 JSZip(動態 import,僅在點擊時載入,不影響首屏),把每個 File 的 arrayBuffer() 取出後以新檔名寫入 ZIP 節點,最後 generateAsync({type:'blob', compression:'DEFLATE', compressionOptions:{level:6}}) 產生壓縮包,DEFLATE 是 ZIP 預設演算法,level=6 在壓縮比和速度之間平衡。 所有規則計算複雜度是 O(n),n 為檔案數;JSZip 的壓縮複雜度取決於檔案總位元組數。主流瀏覽器對 File 物件通常採用惰性讀取,不會把檔案內容預讀進記憶體,arrayBuffer() 才會真正把位元組從磁碟讀出來,因此即便加入數千個檔案,預覽階段的記憶體佔用也接近零,只有點擊「打包下載 ZIP」時才會出現記憶體尖峰。
- lastIndexOf('.') 拆分副檔名時,開頭是 . 且後面沒有更多 . 的檔案(如 .gitignore)會被視為整體基礎名,避免誤把隱藏前綴當副檔名
- 尋找替換使用 String.prototype.split + Array.prototype.join 而非 String.prototype.replaceAll,防止使用者輸入的 $1、$& 等替換字串裡的特殊符號被意外解釋
- 序號補零用 padStart(pad, '0');當 pad=0 時直接輸出原始數字,方便不需要等寬對齊的場景
- 大小寫轉換在前綴和後綴拼接完成後才執行,因此會作用於整個「前綴+基礎名+後綴」字串;副檔名獨立處理,不受影響
- 重名偵測在 useMemo 內基於 Map 計數,時間複雜度 O(n);UI 用 className 切換紅色高亮,不重新產生 DOM
- Blob URL 用完立即 URL.revokeObjectURL 釋放,避免在頻繁下載場景下大量保留的物件 URL 持續占用瀏覽器內部資源池
- JSZip 透過 dynamic import 按需載入,只有點擊「打包下載」才會觸發約 80 KB 的程式碼下載,不影響首屏效能
- DEFLATE level 6 是瀏覽器端常用的折中值——level 9 僅多 1-2% 壓縮率卻慢 2-3 倍,對圖片/影片/已壓縮檔案幾乎無效
示例
前綴 + 三位序號補零
原檔案: photo.jpg, sunset.jpg, beach.jpg
規則: 前綴=trip2026_,序號起始=1,補零=3,位置=後面
結果:
trip2026_photo001.jpg
trip2026_sunset002.jpg
trip2026_beach003.jpg完全替換基礎名為序號
原檔案: GH010001.MP4, GH010002.MP4, GH010003.MP4
規則: 基礎名=SceneA_take,序號起始=1,補零=2,位置=後面,副檔名=改為小寫
結果:
SceneA_take01.mp4
SceneA_take02.mp4
SceneA_take03.mp4尋找替換清理冗餘後綴
原檔案: report_v1_FINAL.docx, summary_v1_FINAL.docx
規則: 尋找=_v1_FINAL,替換為=(空),大小寫=全小寫
結果:
report.docx
summary.docx副檔名替換
原檔案: index.htm, about.htm, contact.htm
規則: 副檔名=替換為,新副檔名=html
結果:
index.html
about.html
contact.html前綴 + 後綴 + 大小寫規範化
原檔案: Banner Image.PNG, Hero Photo.JPG
規則: 前綴=web-,查找= ,替換為=-,大小寫=全小寫,副檔名=改為小寫
結果:
web-banner-image.png
web-hero-photo.jpg常見問題
檔案會上傳到伺服器嗎?
不會。從新增檔案到產生新名再到打包下載,整個流程都在你的瀏覽器裡完成,不存在任何上傳請求。你可以打開瀏覽器開發者工具的 Network 面板驗證。
為什麼我的副檔名(.gitignore、.bashrc)沒有被識別?
工具按「最後一個點之後是副檔名」的規則拆分,但開頭就是點(.gitignore)的隱藏檔視為沒有副檔名,整個 .gitignore 都當作基礎名。這是為了避免錯把隱藏前綴當副檔名處理。
新檔名重複了怎麼辦?
預覽清單會用紅色高亮重名項目,並顯示重名個數。當清單中存在重名時點擊「打包下載 ZIP」會被中止,並顯示錯誤訊息——但檔案清單不會丟失,調整規則後可以直接再試一次。常見解法:啟用序號、調整位數補零、加前後綴。
支援資料夾/巢狀結構嗎?
暫不支援。目前只重新命名單層檔案清單。如果需要帶目錄結構的批次改名,建議先用本工具改名再用「檔案打包壓縮」工具組裝目錄。
尋找替換是否支援正規表達式?
不支援。目前是純字串比對(split-join),是為了避免在替換字串裡誤用 $1、$& 等替換符號。簡單的字面替換覆蓋了絕大多數命名整理場景。
可以處理多少檔案?有大小限制嗎?
理論上沒有數量上限,預覽階段幾乎不耗記憶體。打包階段受瀏覽器單個 Blob 記憶體上限限制:當檔案總和達到幾個 GB 時,可能因為無法分配整塊 Blob 而打包失敗,這種情況下建議把檔案拆成幾批分別打包。
下載的 ZIP 檔名亂碼怎麼辦?
JSZip 預設使用 UTF-8 編碼檔名,現代解壓工具(macOS Archive Utility、Windows 11、7-Zip、WinRAR 5+)都能正確識別。若使用 Windows 自帶舊版檔案總管解壓中文名出現亂碼,請改用 7-Zip 或 Bandizip。
改錯了能撤銷嗎?
重新命名只在下載時才發生——只要你沒點「打包下載 ZIP」或「下載該檔案」,磁碟上的原檔案就不會被改動。預覽階段完全可逆:清空規則、修改規則、移除單個檔案都行。即便已經下載了,也只要重新調整規則、用同樣的來源檔案再下載一次即可。