範文齋

在DOS裏我如何批量修改文件名

當我們要批量修改文件名的時候,我們要如何去做到呢?首先我們要知道這些文件都是上面格式的,下面小編給大家分享下要如何做到吧,裏面都有變量和參數介紹。

在DOS裏我如何批量修改文件名

今天要批量重命名一些文件,(即:目錄FILE下有很多子目錄file1,file2,file3……filen子目錄中都有一個文件aaa.jpg,現要實現aaa.jpg重名爲帶子目錄的名稱,如file1下面的命名爲file1.jpg),想到DOS處理,網上找了些現成腳本,沒達到預期的目的,一時惱火,就小補了下DOS相關知識,包括基本命令,重點研究了下批量處理命令。

如何在DOS下批量修改文件名?

方法一的思路與方法二大致相同,只不過在獲取完整路徑的時候,換用了效率更高的 for /r 語句,並用一個變量var來獲取文件所在文件夾的完整路徑,通過判斷var是否經過賦值來判斷當前處理的音樂文件是否位於同一目錄下,因爲直接用 %%~dpa 獲取到的字符串最後有一個反斜槓,所以,第二個for語句中,用 !var:~,-1! 把最後的反斜槓去掉了(在for語句內部,如果要 引用已經發生了改變的變量,必須使用變量延遲功能,也就是最開始的 setlocal 語句),後面的思路和方法二的一樣。其實,方法一的代碼大可不必判斷當前處理的文件與上一次處理的文件是否位於同一目錄下,因爲 for /r 的時候,會獲得文件的完整路徑,只需要對完整路徑直接進行操作就可以了,可以借鑑隨風的`做法,在 %%~dpa 的時候,直接在最後加上一個點號,可以使得效率進一步提升。

方法一代碼:

01@echo off &setlocal enabledelayedexpansion

02for /r %%a in (aaa.jpg) do (if not defined %%~dpa set "var=%%~dpa"&set

03"%%~dpa=a"

04for %%i in ("!var:~,-1!")do ren "%%~fa" "%%~ni.jpg")

05pause

複製代碼

方法二用 dir /a-d /b /s 來獲取完整路徑名,放到for語句中來解析完整路徑字符串,用 %%~dpa. 來獲取音樂文件所處的文件夾完整路徑(這裏使用了一個小技巧:在字符串最後添加一個點號,從而使得for語句的%%~ni把文件夾名當做文件名來處理,我直接運行以上腳本發現一直出問題,後來發現先顯示下%%~dpa. 即在ren 前加上echo "%%~dpa." 再執行腳本就OK了,具體原因不明,望高手解答),再用 %%~ni 獲取文件夾名,用ren來實現改名,%%~nxi 獲取原文件完整的文件名和後綴名。

方法二代碼:

01@echo off

02for /f "delims=" %%i in ('dir /a-d /b /s D:1*.jpg') do (ren "%%i" "%%~nxi" )

03pause

複製代碼

基本格式(這裏寫的是在命令行裏用的格式,如果是在批處理中,需要把其中%再多加個%形成%%):

for /參數 %變量 in (集) do 命令

注:上面除中文的以外,其餘的是按它的格式要求書寫的,大小寫都行。

參數:FOR分四種參數 D L R F,並且有的參數還可附加另外的選項下面會分別介紹

變量:(記住如果是在批處理中使用for命令時,變量前的%需改爲%%)這個變量名是由單個字母組成且區分大小寫(原幫助是這麼說的,實際運用中用單個數字作爲變量名試過證明也可行),如%B和%b代表的是不同的變量。

一、參數 /d

for /d %%變量 in (集) do 命令

/d 參數是指定僅對目錄而不是文件執行的for命令。

for /d %a in (c:*.*) do @echo %a

二、參數 /R

/R參數之後還可帶盤符及路徑

for /r 此處可以帶有路徑 %變量 in (集) do 命令

例1:

01@echo off

02rem 顯示d:盤中所有文件名爲file1和file2的列表

03for /r d: %%h in (file1,file2) do if exist %%h echo %%h

04pause

複製代碼

例2:

01@echo off

02rem 刪除C盤中所有*的文件

03for /r c: %%h in (*) do del /q %%h

04pause

複製代碼

注:del /q 表示用安靜模式刪除(不需確認)

三、參數 /L

for /L %%變量 in (起始值,每次增值,結束時的比較值) do 命令

(上面L也可用小寫,主要爲了視覺上不與數字1混淆而沒用小寫)

(起始值,每次增值,結束時的比較值)相當於一個等差數字序列,從“起始值”的數字開始,每次增加多少(也可設定爲負數)爲“每次增值”,並與“結束時的比較值”比較,超出則退出for循環(也不執行本輪後面的do 命令)。

例:

01@echo off

02::在D盤建立aa1~ aa5五個文件夾

03for /L %%i in (1,1,5) do md d:aa %%i

04pause

複製代碼

四、參數 /f

這個參數/f將會打開(集)裏的文件,使for命令能處理文本文件的讀取和添加刪除替換等編輯性的操作,可謂功能強大,因此也相對複雜一些。

五、變量

~I - 刪除任何引號("),擴充 %I

%~fI - 將 %I 擴充到一個完全合格的路徑名

%~dI - 僅將 %I 擴充到一個驅動器號

%~pI - 僅將 %I 擴充到一個路徑

%~nI - 僅將 %I 擴充到一個文件名

%~xI - 僅將 %I 擴充到一個文件擴展名

%~sI - 擴充的路徑只含有短名

%~aI - 將 %I 擴充到文件的文件屬性

%~tI - 將 %I 擴充到文件的日期/時間

%~zI - 將 %I 擴充到文件的大小

%~$PATH:I - 查找列在路徑環境變量的目錄,並將 %I 擴充到找到的第一個完全合格的名稱。如果環境變量名未被定義,或者沒有找到文件,此組合鍵會擴充到空字符串。

以上便是在DOS下批量修改文件名的一些見解和方法,用戶可以根據變量和參數對批量修改文件名的文件進行處理。

標籤:dos 文件名 批量