1. 程式人生 > >按數字遞增批量重新命名檔案的批處理

按數字遞增批量重新命名檔案的批處理

按00001這類格式遞增批量重新命名ren.bat:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set /A num=0
FOR /F "tokens=*" %%i in ('dir /A-D /B /OD /TC') do (
    IF NOT "%%i"=="%~n0%~x0" (
        set /A num+=1
        if !num! LSS 10 (
            ren "%%i" 0000!num!%%~xi
        ) ELSE (
            if !num! LSS 100 (
                ren "%%i" 000!num!%%~xi
            ) ELSE (
                if !num! LSS 1000 (
                    ren "%%i" 00!num!%%~xi
                ) ELSE (
                    if !num! LSS 10000 ren "%%i" 0!num!%%~xi
                )
            )
        )
    )
)
ENDLOCAL
exit


如果覺得0多了,可以用下面的批處理來去掉,預設是去1個,要去多少個就
把!name:~1!中的數字1改成要去的個數,改這個批處理要比改前面的批處理
方便一些,所以寫了這個用:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set name=
FOR /F "tokens=*" %%i in ('dir /A-D /B /OD /TC') do (
    IF NOT "%%i"=="%~n0%~x0" (
        set name=%%i
        set name=!name:~1!
        ren "%%i" "!name!"
    )
)
ENDLOCAL
exit

上面的批處理要和檔案放在一個目錄裡,命名後刪除批處理檔案即可。

直接使用dir的話,缺點是重新命名的時候把批處理本身及子資料夾也改名了,而且
所得檔名字不能連續排序(批處理檔案可能佔了中間某個序號),因此用dir參
數進行排除資料夾內的子資料夾以及排序(排序目的就是把批處理排到最後)。

還有就是重名現象不好解決,如果原來已經含有一個重新命名後可能會出現的名稱,
名稱被佔用了程式就不能繼續執行。可以事先用系統的重新命名功能命名一次,方
法是選擇要重新命名的所有檔案,Ctrl+a或者選擇第一個再按住Shift不放,再選最
後一個進行連續選擇,右鍵點選其中一個檔案,選擇重新命名,然後隨便寫一個名
字,你將看到系統的批量命名是以括號內數字遞增的。


排序引數的說明:
下面這行
FOR /F "tokens=*" %%i in ('dir /A-D /B /OD /TC') do (
中的/OD引數是按時間排序,使用的時候把批處理檔案複製到資料夾裡,那麼批處
理檔案的建立時間就是最後的了,解決了檔案連續的問題。

如果用/O-E也可以,這樣也能使批處理檔案排在最後(副檔名是bat,b的優先順序高,
用-號來顛倒順序)。

/OD後再加/TC更準確些。