windows 批處理-重命名


從數字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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM