【命令解釋】
命令: for [參數] %%變量名 in (匹配符) do (執行的命令)
切記:每個指令之間必須以空格隔開,in 與 ( 之間有空格,do 與 ( 間也有空格,否則命令會無法成功執行;
[]:表示此項指令為可選
[參數]:參數取值一共有四種: /d, /r, /l, /f,加上無參數,所以一共五種場景:
- 無參:遍歷當前路徑的文件夾下的文件,但也可在(匹配符)中指定路徑;
- /d:遍歷當前路徑的文件夾下的文件夾,但也可在(匹配符)中指定路徑;
- /r [路徑]:深度遍歷指定路徑下的所有文件,子目錄中的文件也會被遍歷到,如果沒指定路徑,默認當前路徑;
- /l :當使用參數 /l 時,需結合(匹配符)一起使用,此時 () 括號內部的用法規則為:(start, step, end),此時的 for 命令作用等同於 java 語言中的 for 語句;
- /f :用於解析文件中的內容;
%%變量名:作用類似於 for(int i = 0; ; ) 中的 int i = 0,有些區別點的就是,批處理的 for 循環遍歷每一個子項時,%%變量名 <=> 每個子項,即 &&變量名 已經是指向具體的每個子項了;
(匹配符):在 in 指令之后 () 括號里的內容可表示為通配符,用於按照指定的規則過濾文件夾下的文件,如 (*.txt) 表示遍歷文件夾內所有以 .txt 結尾的文件;
(執行的命令):前面的指令就可以取到文件夾內指定的每個子項了,那么接下去要對每個子項如何操作,就在這里寫,類似於 java 的 for 命令后的 {} 大括號的作用;
【使用示例】
1、
無參:for %%i in (*) do ( echo %%i )
效果:遍歷當前目錄下的所有文件;
2、
無參指定路徑:for %%i in (c:\softwares\VisualBat\*.url) do ( echo %%i )
效果:遍歷在(匹配符)中指定路徑下的以 .url 結尾的文件;
3、
帶參數 /d 指定路徑:for /d %%i in (c:\softwares\VisualBat\*) do ( echo %%i )
效果:遍歷指定目錄下的所有文件夾,%%i 指向每個子文件夾的絕對路徑;
4、
帶參數 /r :for /r %%i in (*.url) do ( echo %%i )
效果:深度遍歷當前路徑下所有以 .url 結尾的文件,因為是深度遍歷,因此 %%i 指向文件的絕對路徑;
5、
帶參數 /l :for /l %%i in (1, 1, 5) do ( echo %%i )
效果:等效於 java 中的 for (int i = 1; i <= 5; i++)語句,起始值,遞增或遞減,終止值都可自行設置;
6、
帶參數 /d /r:for /d /r %%i in (*) do ( echo %%i )
效果:參數可結合使用,/d 表示遍歷文件夾,/r 表示深度遍歷,因此以上命令作用為深度遍歷當前目錄下的所有文件夾,包括子目錄中的文件夾;
【文件特殊操作】
如果是在 for 命令中遍歷了某個文件夾下的文件,那么此時可以通過一些特殊命令來獲取這個文件的各種信息,示例:
@echo off
for %%i in (*.txt) do (
echo %%i
echo %%~fi
echo %%~di
echo %%~pi
echo %%~ni
echo %%~xi
echo %%~ti
echo %%~zi
)
解釋: 在通過 for 命令遍歷文件時,%%i 根據不同的 for 使用方式,內容也有所不同,在這種用法下,%%i 指向了當前目錄下每個文件名,完整的文件名。那么,此時就可以通過一些特殊命令來取得文件的相關信息,比如:
%%~fi:表示獲取該文件的絕對路徑信息
%%~di:表示獲取該文件所在的盤符
%%~pi:表示獲取該文件的路徑,不包含盤符的信息
%%~ni:表示獲取該文件的文件名,不包含擴展名信息
%%~xi:表示獲取該文件的擴展名
%%~ti:表示獲取該文件的上次修改時間
%%~zi:表示獲取該文件的大小
%%~nxi:表示獲取該文件的文件名和擴展名,不包含盤符以及路徑信息
參考引用:
https://www.cnblogs.com/dasusu/p/9058554.html