從數字1遞增批量重命名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 ren "%%i" "!num!%%~xi" ) ) ENDLOCAL exit
按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更准確些。
dir中/O和/T參數的說明:
/O 用分類順序列出文件。
sortorder N 按名稱(字母順序) S 按大小(從小到大)
E 按擴展名(字母順序) D 按日期/時間(從先到后)
G 組目錄優先 - 顛倒順序的前綴
/T 控制顯示或用來分類的時間字符域。
timefield C 創建時間
A 上次訪問時間
W 上次寫入的時間
for會自動去掉空行的,所以參數肯定不為空。
參考:
http://www.newsmth.net/nForum/#!article/DOS/17370
log.csdn.net/liujishen/article/details/4490859
http://www.cnblogs.com/shiney/archive/2011/07/04/2097236.html
