發(fā)信人: oicu (Oh! I see you!), 信區(qū): DOS
標(biāo) 題: 按數(shù)字遞增批量重命名文件的批處理
發(fā)信站: 水木社區(qū) (Sat Dec 16 02:33:49 2006), 站內(nèi)
一時興起寫了個簡單的批量重命名的批處理:
從數(shù)字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多了,可以用下面的批處理來去掉,默認(rèn)是去1個,要去多少個就把!name:~1!中的數(shù)字1改成要去的個數(shù),改這個批處理要比改前面的批處理方便一些,所以寫了這個用:
@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的話,缺點(diǎn)是重命名的時候把批處理本身及子文件夾也改名了,而且
所得文件名字不能連續(xù)排序(批處理文件可能占了中間某個序號),因此用dir參
數(shù)進(jìn)行排除文件夾內(nèi)的子文件夾以及排序(排序目的就是把批處理排到最后)。
還有就是重名現(xiàn)象不好解決,如果原來已經(jīng)含有一個重命名后可能會出現(xiàn)的名稱,
名稱被占用了程序就不能繼續(xù)運(yùn)行??梢允孪扔孟到y(tǒng)的重命名功能命名一次,方
法是選擇要重命名的所有文件,Ctrl+a或者選擇第一個再按住Shift不放,再選最
后一個進(jìn)行連續(xù)選擇,右鍵點(diǎn)擊其中一個文件,選擇重命名,然后隨便寫一個名
字,你將看到系統(tǒng)的批量命名是以括號內(nèi)數(shù)字遞增的。
排序參數(shù)的說明:
下面這行
FOR /F "tokens=*" %%i in ('dir /A-D /B /OD /TC') do (
中的/OD參數(shù)是按時間排序,使用的時候把批處理文件復(fù)制到文件夾里,那么批處
理文件的創(chuàng)建時間就是最后的了,解決了文件連續(xù)的問題。
如果用/O-E也可以,這樣也能使批處理文件排在最后(擴(kuò)展名是bat,b的優(yōu)先級高,
用-號來顛倒順序)。
/OD后再加/TC更準(zhǔn)確些。
dir中/O和/T參數(shù)的說明:
/O 用分類順序列出文件。
sortorder N 按名稱(字母順序) S 按大小(從小到大)
E 按擴(kuò)展名(字母順序) D 按日期/時間(從先到后)
G 組目錄優(yōu)先 - 顛倒順序的前綴
/T 控制顯示或用來分類的時間字符域。
timefield C 創(chuàng)建時間
A 上次訪問時間
W 上次寫入的時間
for會自動去掉空行的,所以參數(shù)肯定不為空。 ]
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。