在DOS裡我如何批量修改檔名

來源:果殼範文吧 1.63W

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

在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下批量修改檔名的一些見解和方法,使用者可以根據變數和引數對批量修改檔名的檔案進行處理。

熱門標籤