Windows批處理命令學習——將文件名自動更名為當前系統日期
Windows批處理命令學習——將文件名自動更名為當前系統日期
——學習自《批處理命令在Windows操作中的典型應用》(張發凌編著)
若要將某個指定的文件名改為當前日期,而擴展名保留不變,可利用批處理程序巧妙地完成。
創建批處理文件renamefiletoday.bat,代碼如下:
- @echo off
- if not exist %1 ( echo 命令用法如下:
- echo %0 filename
- echo filename:表示需要修改的文件名。
- echo.
- echo.
- goto end
- )
- set extension = %~x1
- for /F "tokens = 1-3 delims=/-" %%A in (date/T) do set date=%%A%%B%%C
- ren %1 %date%%extension%
- echo.
- echo 文件%1已經成功更名為%date%%extension%
- set extension=
- set date=
- :end
代碼解析:
第2行:判斷是否合存在「%1」文件(%1為命令行傳給批處理要改名的文件),若文件不存在則執行if語句塊,if語句塊主要顯示了批處理的使用方法。
第3行:顯示批處理的使用方法,「%0」表示批處理名。
第4行;給用戶提示幫助信息,說明參數「filename」所表達的含意。
第7行:直接跳轉到「end」號處,結束批處理運行。
第8行:if語句塊的結束。
第9行:定義一個變數「extension」,其值為被修改文件的擴展名。「%1」表示被修改的文件名,「%~x1」表示「%1」文件的擴展名,「~x」組合表示取變數的擴展名。
第10行:for語句的「/f」參數表示使用文件解析過程處理命令輸出、字元串和文件內容,「tokens」用於定義「for」中的變數個數,「delims"用於定義字元串的分格符。
本行for語句在運行時,首先執行「in」後括弧中的「date/t」命令,返回當前日期字元串形如「2007-01-25 星期五」。for 語句根據"tokens=l-3 delims/-」 參數指示,將2007-01-25 星期五」字元串分隔為「2007」、「25」、「01」及「星期五」,並將前3個字元串依次賦給「%%A」、 「%%B」、「%%C」 3個for變數。變數的個數由「tokens」指定,而「delims」指定用於分隔字元串的分隔符。
當for語句執行完成後,date的值變成了「20070125」。需要注意的是,for中「delims"參數為」/」、」-」和空格。
第11行:利用「ren」命令將「%1」文件名更改為「%date%%extension%」。其中「%date%」 代表當前日期,「%extension%」代表擴展名。
第14行:清除批處理中使用的「extension」變數,以免影響系統或其他批處理程序使用。
第15行:清除批處理中使用的「date」變數,以免影響系統或其他批處理程序使用。
第16行:定義標號「end」,以便在未指定要修改的文件名情況下,直接退出批處理程序。
自己的實驗:
(1)只輸入renamefiletoday.bat,不輸入要更改的文件(批處理.jpg)時,出現提示信息,運行正確。刪除第5和第6行的代碼「echo.」時,對程序運行無影響,不知道這個「echo.」有什麼用?
(2)輸入renamefiletoday.bat及要更改的文件名時,出現錯誤提示「此時不應有 tokens = 1-3 delims=/-「 命令語法不正確」,但仍然提示了文件(批處理.jpg)已經成功更名,實際上並沒有。不知道是什麼地方出錯,怎麼修改?
如下圖: