bat批處理教程之for的 f引數

2022-05-09 22:14:48 字數 2780 閱讀 3514

from:

for對很多批處理新手來說可能是最不好理解的,而微軟的幫助又極為苦澀難懂,所以我想把我所了解的for盡可能以最簡單的方式寫出來。當然,因為是自己的理解,難免會有錯,還請各位指出。好了,開始。

1.沒有任何引數的for

格式為:for %%i in (set) do command

%%i 為變數

set為乙個檔案或者一組檔案,其實就是乙個集合。可用萬用字元,比如*.txt。

command 是要執行的命令。

看個例子:

有個資料夾,有如下檔案:

a.txt

b.***

c.***

c.wma

a.rm

e.bat

你想顯示裡面的擴充套件名為***的檔案,你會用什麼命令呢?當然是dir了,dir *.***。同樣的,for也可以來實現,如下:

for%%i in

(*.***) do

echo

%%i這如何理解?

for會先從括號裡面執行,因為括號裡面是*.***,所以for 會先得到當前目錄下所有的副檔名是***的檔案,並把它們作為乙個集合,而每個檔名就是乙個元素,像這樣,然後用%%i依次代替每個元素,之後做do 後面的命令。

具體過程如下:

用%%i代替b.***,然後執行echo %%i,顯示b.***

用%%i代替c.***,再執行echo %%i,顯示c.***

沒有元素了,for就停止了。

當然,()裡面不侷限於乙個檔案或者萬用字元,可以有多個,比如:

for %%i in (*.***,*.wma) do echo %%i也是可以的。

注意:do後面可以跟任何命令,不要侷限於echo,這裡只是演示。

2. 含有/l的for

格式為:for /l %%i in (start ,step,end) do command

這個表示以增量形式從start 到end的乙個數字序列,步長是step,就是每次的增量是step

比如:(1,1,5) 將產生序列 1 2 3 4 5,(1,2,9) 將產生1 3 5 7 9序列。這有什麼用呢?

舉個例子,你想同時開啟3個記事本程式,可以這樣:

for /l %%i in (1,1,3) do notpad.exe

如何理解?

還是從括號先執行,產生集合,然後用%%i依次代替集合中的每個元素,之後執行do 後面的命令。  當然這裡每次%%i替換集合裡面的元素是沒有意義的,因為我們並沒有在do 後面的命令中用到%%i,但是你不能阻止%%i代替每個元素。  因為有3個元素,所以do 後面的命令執行3次就停止了。 

再舉乙個例子,加入你要顯示1到20之間的奇數,怎麼辦,可以如下:

for /l %%i in (1,2,20) do echo %%i

同樣是先產生集合,然後用%%i依次代替每個元素,之後執行do 後面的echo %%i  這個例子就體現出變數%%i會始終代替集合中的每個元素。

3.含有/f的for

格式:for /f ["options" ] %%i in (file) do command

for /f ["options" ] %%i in ("string" ) do command

for /f ["options" ] %%i in ('command') do command

這個可能是最常用的,也是最強的命令,主要用來處理檔案和一些命令的輸出結果。

file代表乙個或多個檔案

string 代表字串

command代表命令

["options"] 可選

對於for /f %%i in (file) do command

file為檔名,按照官方的說法是,for 會依次將file中的檔案開啟,並且在進行到下乙個檔案之前將每個檔案讀取到記憶體,按照每一行分成乙個乙個的元素,忽略空白的行,看個例子。

假如檔案a.txt中有如下內容:

第1行第1列 第1行第2列 第1行第3列

第2行第1列 第2行第2列 第2行第3列

第3行第1列 第3行第2列 第3行第3列

你想顯示a.txt中的內容,會用什麼命令呢?當然是type ,type a.txt

for也可以完成同樣的命令:

for /f %%i in (a.txt) do echo %%i

還是先從括號執行,因為含有引數/f,所以for

會先開啟a.txt,然後讀出a.txt裡面的所有內容,把它作為乙個集合,並且以每一行作為乙個元素,所以會產生這樣的集合:

rem 第三個元素

經過調查,下面講到的delims和 tokens 是有預設值的,delims預設值是空格和跳格鍵,tokens 預設值是1(其實原作者後面已經講了,只是可能沒注意),所以產生的集合應該是:

集合中只有3個元素,同樣用%%i依次代替每個元素,然後執行do後面的命令。

具體過程:

用%%i代替"第1行第1列 第1行第2列 第1行第3列",執行do後面的echo %%i,顯示"第1行第1列 第1行第2列 第1行第3列",

用%%i代替"第2行第1列 第2行第2列 第2行第3列",執行echo %%i,顯示"第2行第1列 第2行第2列 第2行第3列",

依次,直到每個元素都代替完為止。

同樣原因執行過程應該為:

用"第1行第1列" 代替%%i,執行do後面的echo %%i,顯示"第1行第1列",

用"第2行第1列"代替%%i,執行echo %%i,顯示"第2行第1列",

依次,直到每個元素都代替完為止。

BAT 批處理指令碼教程 四

批處理中的變數 批處理中的變數,我把他分為兩類,分別為 系統變數 和 自定義變數 我們現在來詳解這兩個變數 一 系統變數 他們的值由系統將其根據事先定義的條件自動賦值,也就是這些變數系統已經給他們定義了值,不需要我們來給他賦值,我們只需要呼叫而以 我把他們全部列出來 這麼多系統變數,我們如何知道他的...

批處理 bat的簡單操作

最近使用了較多的bat的基本操作,簡單的記錄下,以備不時之需。也希望對看到此文章的朋友有所幫助。bat的使用,可以開啟cmd命令視窗,然後輸入對用的命令,然後使用 提示使用,例如 copy del a.txt 刪除命令 del a.txt del a 刪除a資料夾下的所有檔案,需要確認 del q ...

清除cookies的批處理 bat

清除cookies的批處理 bat 原理就是刪除當前使用者的cookies資料夾。這是個小技巧,把手動清除cookies的幾步折合成了一步。第一步 在桌面上新建乙個文字檔案為 一步清除cookies.txt 把副檔名改為bat,即 一步清除cookies.bat 第二步 echo off del q...