DOS之for迴圈用法說明

2022-10-08 23:45:34 字數 4026 閱讀 4866

**:

windows bat指令碼的for語句基本形態如下:

2在cmd視窗中:for%iin(command1)docommand2

在批處理檔案中:for%%iin(command1)docommand2

之所以要區分cmd視窗和批處理檔案兩種環境,是因為在這兩種環境下,命令語句表現出來的行為雖然基本一樣,但是在細節上還是稍有不同,最明顯的乙個差異就是:在cmd視窗中,for之後的形式變數i必須使用單百分號引用,即%i;而在批處理檔案中,引用形式變數i必須使用雙百分號,即%%i。為了方便起見,若不是特別強調,以下的講解都以批處理檔案環境為例。

我們先來看一下for語句的基本要素都有些什麼:

for、in、do 是for語句的關鍵字,它們三個缺一不可;

%%i是for語句中對形式變數的引用,即使變數l在do後的語句中沒有參與語句的執行,也是必須出現的;

in之後,do之前的括號不能省略;

command1表示字串或變數,command2表示字串、變數或命令語句;

下面來看乙個windows bat指令碼的demo(記為demo1):23

@echooff

for%%iin(abc)doecho%%i

pause

儲存為.bat檔案(批處理檔案)並執行,將會在彈出的批處理視窗中看到這樣的資訊:

對批處理檔案的for迴圈就是這樣簡單,下面來看看for語句的注意事項,並執行更複雜的for迴圈例項。

有了以上的基礎,我們再來看下面這個例子,這個例子修改了demo1中的部分內容(記為demo2),結果將大不一樣:23

@echooff

for%%iin(a,b,c)doecho%%i

pause

執行結果如下:

如果把 bbs.bathome.cn 這個字串中的點號換為空格、跳格或等號,執行結果將和demo2的執行結果別無二致。

現在,來分析一下demo2**中for語句的執行過程:

1.for語句以逗號為分隔符,把 a,b,c 這個字串切分成三個元素:a、b和c,由此決定了do後的語句將會被執行3次; 

2.第一次執行過程是這樣的:先把 bbs 這個字串作為形式變數i的值,帶入do後的語句中加以執行,也就是執行 echo %%i 語句,此時的i值為a,因此,第一次執行的結果,將會在螢幕上顯示a這個字串;第二次執行和第一次執行的過程是一樣的,只不過此時i的值已經被替換為command1中的第二個元素了,也就是 b 這個字串;如此迴圈,當第三次echo執行完畢之後,整條for語句才算執行完畢,此時,將執行下一條語句,也就是pause命令。

高階用法:

1)搜尋當前目錄下有哪些檔案?23

@echooff

for%%iin(*.*)doecho"%%i"

pause

2)搜尋當前目錄下所有的文字檔案?23

@echooff

for%%iin(*.txt)doecho"%%i"

pause

一、引數 /d (引數只能顯示當前目錄下的目錄名字)

格式:for /d %variable in (set) do command [command-parameters]  

這個引數主要用於目錄搜尋,不會搜尋檔案,/d 引數只能顯示當前目錄下的目錄名字。(特別說明:只會搜尋指定目錄下的目錄,不會搜尋再下一級的目錄。)  

示例:  

for /d %%i in (c:\*) do echo %%i  --顯示c盤根目錄下的所有目錄  

for /d %%i in (???) do echo %%i  --顯示當前目錄下名字只有1-3個字母的目錄  

二、引數 /r (搜尋指定路徑及所有子目錄中與set相符合的所有檔案)

格式:for /r [[drive:]path] %variable in (set) do command [command-parameters]  

此命令會搜尋指定路徑及所有子目錄中與set相符合的所有檔案,注意是指定路徑及所有子目錄。  

1、set中的檔名如果含有萬用字元(?或*),則列舉/r引數指定的目錄及其下面的所用子目錄中與set相符合的所有檔案,無相符檔案的目錄則不列舉。  

2、如果set中為具體檔名,不含萬用字元,則列舉該目錄樹(即列舉該目錄及其下面的所有子目錄)(並在後面加上具體的檔名),而不管set中的指定檔案是否存在。  

例:for /r c:\ %%i in (*.exe) do echo %%i --把c盤根目錄,和每個目錄的子目錄下面全部的exe檔案都列出來了!!!!  

示例:  

for /r c:\ %%i in (boot.ini) do echo %%i --列舉了c盤所有目錄  

for /r d:\backup %%i in (1) do echo %%i  --列舉d\backup目錄  

for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i  --很好的搜尋命令,列舉boot.ini存在的目錄  

三、引數 /l (該集表示以增量形式從開始到結束的乙個數字序列。可以使用負的 step)

格式:for /l %variable in (start,step,end) do command [command-parameters]  

該集表示以增量形式從開始到結束的乙個數字序列。可以使用負的 step  

示例:  

for /l %%i in (1,1,5) do @echo %%i    --輸出1 2 3 4 5  

for /l %%i in (1,2,10) do @echo %%i    --輸出1,3,5,7,9   

for /l %%i in (100,-20,1) do @echo %%i    --輸出100,80,60,40,20  

for /l %%i in (1,1,5) do start cmd    --開啟5個cmd視窗  

for /l %%i in (1,1,5) do md %%i    --建立從1~5共5個資料夾  

for /l %%i in (1,1,5) do rd /q %%i    --刪除從1~5共5個資料夾 

C new 用法說明

int a newint 這句相當於 int a 0 a 是空 int a new int 20 這句的本質是指標指向乙個 int20 的空間 在堆裡 這個與class 類似的。1 new運算子 用於建立物件和呼叫建構函式。這種大家都比較熟悉,沒什麼好說的了。2 new修飾符 在用作修飾符時,new...

SQLSERVER DBCC 用法說明

一 dbcc 幫助類命令 dbcc help 查詢所有的dbcc命令 dbcc help 命令 查詢指定的dbcc命令的語法說明 dbcc useroptions 返回當前連線的活動 設定 的set選項 二 dbcc 檢查驗證類命令 dbcc checkalloc 資料庫名稱 檢查指定資料庫的磁碟空...

linux c setitimer用法說明

在linux c程式設計中,setitimer是乙個比較常用的函式,可用來實現延時和定時的功能。使用時需要引入的標頭檔案 cpp view plain copy include setitimer函式原型 cpp view plain copy intsetitimer intwhich,const...