bat知識點3 for迴圈

2021-07-16 23:11:36 字數 4460 閱讀 7837

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語句 直到型迴圈結構 先執行操作,...

迴圈知識點鞏固

迴圈結構的程式設計是面向過程的程式設計課程的核心部分,掌握好迴圈結構的程式設計技術對學好此類課程至關重要。小白已經經歷了利用計算機使用和掌握了程式設計中選擇結構,感悟了程式設計是其中的關鍵環節,對程式設計已經產生一定興趣,但由於在程式設計過程中,會出現重複的進行一些相同功能語句的編寫 為了讓程式設計...