1. 程式人生 > >[持續更新]批處理重命名系列案例

[持續更新]批處理重命名系列案例

批處理用於文字/檔案的操作確實非常簡單有力!不用多麼複雜的程式碼,僅一個記事本加上簡潔的程式碼即可搞定大部分文字/檔案的操作,下面記錄下我用過的一些程式碼,基本都是我在百度回答知友的一些程式碼,既給澗客們參考,也讓起到備忘的作用。。。。(本文是系列博文,將持續更新,敬請關注!)

案例一、

百度原址 知友問:
想把一個資料夾裡的全部檔案都命名成 001,002……這樣按順序,什麼順序無所謂,只要名字都變了就行,誰幫忙寫個

我給出的程式碼:

Shell
12345678910 @echooff    setlocal enabledelayedexpansion     set var=1000for/r"%~dp0"%%iin(*.*)do(set/avar+=1ifnot"%%~nxi"=="%~nx0"ren"%%i"!var:~-3!%%~xi)pause>nul   echo處理完畢,任意鍵退出...exit

簡單解釋:
1.使用 for /r 遍歷當前目錄(%~dp0)下所有檔案,效率比 for /f + dir /s /b 高;
2.if not 語句用於排除 bat 檔案本身,全路徑是%0,拓展到 bat 檔名:%~nx0;
3.利用變數 1000 開始累加,每次利用!var:~-3!取得後三位,即依次為 001、002、003...
Ps:var=1000,那麼此指令碼最多重新命名 999 個檔案,再多將出現覆蓋錯誤,如何修改?請澗客思考,最好能在評論中留下您的程式碼,呵呵!(比較簡單,大蝦請勿拍磚!)

案例二、
百度原址 知友問:

“比如,我有一個資料夾裡的檔案都是 X1,、X2…X51,我有個的檔名字是 X15.ass,用完以後變成[Yousei-raws] Soul Eater 14 [BDrip 1280x720 x264 FLAC].ass 程式碼如下:

Shell
1234567 @echooff   seta=0setlocal EnableDelayedExpansion   for%%nin(*.ass)do(ren"%%n""[Yousei-raws] Soul Eater !a! [BDrip 1280x720 x264 FLAC].ass"set/Aa+=1)

如何才能讓順序變正確,順便說一下,最後一個 51 變成了 1.

我給出的程式碼:

Shell
1234567 @echooff     seta=100setlocal EnableDelayedExpansion     for/f"delims=*"%%nin('dir /b *.ass')do(set/aa+=1ren"%%n""[Yousei-raws] Soul Eater !a:~-2! [BDrip 1280x720 x264 FLAC].ass")

簡單解釋:因為 a 的值,被初始化為 0,所以第一個檔案就是 0,第二個是 1,那麼第 15 個就是 14 了。。。程式碼調換了下順序,先給 a+1,讓重新命名時 a 的值為 1 即可。

Ps:此處使用 for+dir 的方式,效率雖然會低一點,但是出錯率也降低了,容易懂!當然一樣可以用 for /r。