1.for的定義
在批處理檔案中基本用法 :
for %%i in (command1) do command2
(1)for、in 和do 是 for 語句的關鍵字,它們三個缺一不可。
(2)%%i 是for 語句中對形式變數的引用,就算它在do 後的語句中沒有參與語句的執行,也是必須出現的。
形式變數 i,可以換成 26 個字母中的任意乙個,這些字母會區分大小寫,也就是說,%%i 和%%i 會被認為
不是同乙個變數;形式變數 i還可以換成其他的字元,但是,為了不與批處理中的%0~%9 這10 個形式變數
發生衝突,請不要隨意把%%i 替換為%%0 ~%%9 中的任意乙個。
(3)in 之後,do 之前的括號不能省略。
(4)command1 表示字串或變數,command2 表示字串、變數或命令語句。
(5)for 後 可以 加 /f /r /l /d 這四個 引數
/f 用於讀取檔案內容,以行為單位處理文字檔案。
/r 檢查以/r後面跟的 path 為根的目錄樹中,所有符合的檔案或者資料夾。若沒有指定目錄,則使用當前目錄。
/l 增量形式(即從1-254或254-1)
/d 用於搜尋目錄或資料夾,但不會搜尋檔案,也不搜尋子目錄。
2.切分字串的利器:delims=
test.txt----------------
123,456
test.bat----------------
@echo off
for /f "delims=," %%i in (test.txt) do echo %%i
執行結果:
123由上,每行第乙個逗號之後的所有內容都不見了(如果有不存在逗號的行,則保留原樣)。
如果沒有指定"delims=符號列表"這個開關,那麼,for /f 語句預設以空格鍵或跳格鍵作為分隔符號。
test1.txt----------------
1.2345,6
test1.bat----------------
@echo off
for /f "delims=.," %%i in (test1.txt) do echo %%i
執行結果:
2345
由上,第乙個點號或第乙個逗號之前的內容都被提取出來了。
test1.bat的執行過程是:
逐行讀取 test1.txt 中的內容,以點號和逗號切分每一行的內容(不存在點號和逗號的行,
則不再切分,為了描述的方便,我們把被點號或逗號切分的乙個乙個的字串片段,稱之為節),
然後,for /f 會提取第一節的內容作為最終結果,顯示在螢幕上。需要注意的是,在這裡,所有行的
字串被切分成了兩個以上的節,但是,**只會提取第一節字串的內容,因為 for /f 語句預設
只提取第一節的符串。
3.定點提取:tokens=
tokens= 後面一般跟的是數字,如 tokens=2,也可以跟多個,但是每個數字之間用逗號分隔,
如 tokens=3,5,8,它們的含義分別是:提取第2 節字串、提取第3、第5 和第8 節字串。
注意,這裡所說的「節」,是由 delims= 這一開關劃分的,它的內容並不是一成不變的。
(1)test2.txt----------------
12,345,6
test2.bat----------------
@echo off
for /f "delims=,tokens=3" %%i in (test2.txt) do echo %%i
執行結果:
6由上,要提取的內容在以逗號切分的第3節上,即為6。
(2)如果 tokens= 後面指定了多個數字,如果形式變數為%%i,那麼,第乙個
數字指代的內容用第乙個形式變數%%i 來接收,第二個數字指代的內容用第二
個形式變數%%j 來接收,第三個數字指代的內容用第三個形式變數%%k 來接
收??第n 個數字指代的內容用第n 個形式變數來接收,其中,形式變數遵循
字母的排序,第 n 個形式變數具體是什麼符號,由第乙個形式變數來決定:如
果第乙個形式變數是%%i,那麼,第二個形式變數就是%%j;如果第乙個形式
變數用的是%%x,那麼,第二個形式變數就是%%y。
test3.txt----------------
12,345,6,78,9
test3.bat----------------
@echo off
for /f "delims=,tokens=2,5" %%i in (test3.txt) do echo %%i %%j
執行結果:
345 9
由上,要提取的內容在以逗號切分的第2和5節上,即為345 9。
如果要提取的內容是連續的多「節」的話,那麼,連續的數字可以只寫最小值和最大值,中間用短橫連
接起來即可,比如
tokens=1,2,3,4,5 可以簡寫為 tokens=1-5 。
還可以把這個表示式寫得更複雜一點:
tokens=1,2-5 ,tokens=1-3,4,5
(3)test4.txt----------------
12,345,6
test4.bat----------------
@echo off
for /f "delims=, tokens=1,*" %%i in (test4.txt) do echo %%i %%j
執行結果:
12 345,6
由上,第乙個逗號不見了,取代它的是乙個空格符號,其餘部分保持不變。
其中奧妙就在這個星號上面。
tokens=後面所接的星號具備這樣的功能:字串從左往右被切分成緊跟在*之前的數值所表示的節數之後,
字串的其餘部分保持不變,整體被*所表示的乙個變數接收。
test4.txt的內容被切分,切分符號為逗號,當切分完第一節之後,切分動作不再繼續下去,
因為 tokens=1,* 中,星號前面緊跟的是數字 1;第一節字串被切分完之後,其餘部分字串
不做任何切分,整體作為第二節字串,這樣,test4.txt就被切分成了兩節,分別被變數%%i 和
變數%%j 接收。
4.跳過無關內容:skip=n
for /f 允許你跳過這些無用的行,直接從第n+1 行開始處理,這個時候,就需要使用引數 skip=n,
其中,n 是乙個正整數,表示要跳過的行數。
@echo off
for /f "skip=2" %%i in (test.txt) do echo %%i
這段**將跳過頭兩行內容,從第3 行起顯示test.txt 中的資訊。
5.忽略以指定字元打頭的行:eol=
(1)忽略以分號打頭的那些行
@echo off
for /f "eol=;" %%i in (test.txt) do echo %%i
只能指定1個指定字元。
for /f 語句是預設忽略以分號打頭的行內容的,正如它預設以空格鍵或跳格鍵作為字串的切分字元一樣。
6.for /f的變形語句
(1)讀取文字檔案中的內容
for /f %%i in (檔名) do (...)
例如:for /f %%i in (test.txt) do echo %%i
(2)讀取命令語句執行結果中的內容
for /f %%i in ('命令語句') do (...)
例如:for /f %%i in ('dir /a-d /b *test*.txt') do echo %%i
(3)要處理的是乙個字串時
for /f %%i in ("字串") do (...)
例如:for /f "delims=. tokens=1-3" %%i in ("bbs.bathome.cn") do echo %%i-%%j-%%k
7.usebackq
是乙個增強型引數,當使用了這個引數之後,原來的for語句中第乙個括號內的寫法要做如下變動:
如果第乙個括號裡的物件是一條命令語句的話,原來的單引號'要改為後引號`;
如果第乙個括號裡的物件是字串的話,原來的雙引號"要改為單引號';
如果第乙個括號裡的物件是檔名的話,要用雙引號"括起來。
此欄位主要用於解決檔案路徑中含有特殊字元的情況,比如檔名中含有空格或&。
@echo off
for /f "usebackq" %%i in ("test 1.txt") do echo %%i
注意:上面的檔案名字中帶有空格。
(1)for /f "usebackq" %%i in ("檔名") do (...)
(2)for /f "usebackq" %%i in (`命令語句`) do (...)
(3)for /f "usebackq" %%i in ('字串') do (...)
bat知識點3 for迴圈 指定變數
1.概述 在批處理檔案中使用for命令時,指定變數使用 variable 可以使用下列選項語法 i 刪除任何引號 擴充 i fi 將 i擴充到乙個完全合格的路徑名 di 僅將 i擴充到乙個驅動器號 pi 僅將 i擴充到乙個路徑 ni 僅將 i擴充到乙個檔名 xi 僅將 i擴充到乙個副檔名 si 擴充...
迴圈結構知識點
迴圈控制結構 一 知識點 1.迴圈型別 計數控制的迴圈 需要重複處理的次數是已知的 條件控制的迴圈 需要重複處理的次數是未知的,是由給定條件控制的 2.迴圈結構型別 當型迴圈結構 條件成立時,反覆執行某操作,直到條件不成立時結束迴圈。常見語句 while語句,for語句 直到型迴圈結構 先執行操作,...
迴圈知識點鞏固
迴圈結構的程式設計是面向過程的程式設計課程的核心部分,掌握好迴圈結構的程式設計技術對學好此類課程至關重要。小白已經經歷了利用計算機使用和掌握了程式設計中選擇結構,感悟了程式設計是其中的關鍵環節,對程式設計已經產生一定興趣,但由於在程式設計過程中,會出現重複的進行一些相同功能語句的編寫 為了讓程式設計...