按數字遞增批量重新命名檔案的批處理
阿新 • • 發佈:2019-01-07
按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更準確些。
@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更準確些。