溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在bat腳本中使用for循環(huán)

發(fā)布時(shí)間:2021-03-31 16:58:23 來(lái)源:億速云 閱讀:541 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

怎么在bat腳本中使用for循環(huán)?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

Windows bat腳本的for語(yǔ)句基本形態(tài)如下:

在cmd窗口中:for %I in (command1) do command2 
在批處理文件中:for %%I in (command1) do command2

之所以要區(qū)分cmd窗口和批處理文件兩種環(huán)境,是因?yàn)樵谶@兩種環(huán)境下,命令語(yǔ)句表現(xiàn)出來(lái)的行為雖然基本一樣,但是在細(xì)節(jié)上還是稍有不同,最明顯的一個(gè)差異就是:在cmd窗口中,for之后的形式變量I必須使用單百分號(hào)引用,即%I;而在批處理文件中,引用形式變量I必須使用雙百分號(hào),即%%I。為了方便起見(jiàn),若不是特別強(qiáng)調(diào),以下的講解都以批處理文件環(huán)境為例。

我們先來(lái)看一下for語(yǔ)句的基本要素都有些什么:

  1. for、in和do是for語(yǔ)句的關(guān)鍵字,它們?nèi)齻€(gè)缺一不可;

  2. %%I是for語(yǔ)句中對(duì)形式變量的引用,即使變量l在do后的語(yǔ)句中沒(méi)有參與語(yǔ)句的執(zhí)行,也是必須出現(xiàn)的;

  3. in之后,do之前的括號(hào)不能省略;

  4. command1表示字符串或變量,command2表示字符串、變量或命令語(yǔ)句;

  下面來(lái)看一個(gè)Windows bat腳本的demo(記為demo1):

@echo off
for %%I in (ABC) do echo %%I
pause

  保存為.bat文件(批處理文件)并執(zhí)行,將會(huì)在彈出的批處理窗口中看到這樣的信息:

怎么在bat腳本中使用for循環(huán)

  對(duì)批處理文件的for循環(huán)就是這樣簡(jiǎn)單,下面來(lái)看看for語(yǔ)句的注意事項(xiàng),并運(yùn)行更復(fù)雜的for循環(huán)實(shí)例。

  • for語(yǔ)句的形式變量I,可以換成26個(gè)字母中的任意一個(gè),這些字母會(huì)區(qū)分大小寫(xiě),也就是說(shuō),%%I和%%i會(huì)被認(rèn)為不是同一個(gè)變量;形式變量I還可以換成其他的字符,但是,為了不與批處理中的%0~%9這10個(gè)形式變量發(fā)生沖突,請(qǐng)不要隨意把%%I替換為%%0~%%9中的任意一個(gè);

  • in和do之間的command1表示的字符串或變量可以是一個(gè),也可以是多個(gè),每一個(gè)字符串或變量,我們稱之為一個(gè)元素,每個(gè)元素之間,用空格鍵、跳格鍵、逗號(hào)、分號(hào)或等號(hào)分隔;

  • for語(yǔ)句依次提取command1中的每一個(gè)元素,把它的值賦予形式變量I,帶到do后的command2中參與命令的執(zhí)行;并且每次只提取一個(gè)元素,然后執(zhí)行一次do后的命令語(yǔ)句,而無(wú)論這個(gè)元素是否被帶到command2中參與了command2的運(yùn)行;當(dāng)執(zhí)行完一次do后的語(yǔ)句之后,再提取command1中的下一個(gè)元素,再執(zhí)行一次command2,如此循環(huán),直到command1中的所有元素都已經(jīng)被提取完畢,該for語(yǔ)句才宣告執(zhí)行結(jié)束。

有了以上的基礎(chǔ),我們?cè)賮?lái)看下面這個(gè)例子,這個(gè)例子修改了demo1中的部分內(nèi)容(記為demo2),結(jié)果將大不一樣:

@echo off
for %%I in (A,B,C) do echo %%I
pause

  運(yùn)行結(jié)果如下:

怎么在bat腳本中使用for循環(huán)

如果把 bbs.bathome.cn 這個(gè)字符串中的點(diǎn)號(hào)換為空格、跳格或等號(hào),執(zhí)行結(jié)果將和demo2的執(zhí)行結(jié)果別無(wú)二致。

現(xiàn)在,來(lái)分析一下demo2代碼中for語(yǔ)句的執(zhí)行過(guò)程:

  1.for語(yǔ)句以逗號(hào)為分隔符,把 A,B,C 這個(gè)字符串切分成三個(gè)元素:A、B和C,由此決定了do后的語(yǔ)句將會(huì)被執(zhí)行3次; 

  2.第一次執(zhí)行過(guò)程是這樣的:先把 bbs 這個(gè)字符串作為形式變量I的值,帶入do后的語(yǔ)句中加以執(zhí)行,也就是執(zhí)行 echo %%I 語(yǔ)句,此時(shí)的I值為A,因此,第一次執(zhí)行的結(jié)果,將會(huì)在屏幕上顯示A這個(gè)字符串;第二次執(zhí)行和第一次執(zhí)行的過(guò)程是一樣的,只不過(guò)此時(shí)I的值已經(jīng)被替換為command1中的第二個(gè)元素了,也就是 B 這個(gè)字符串;如此循環(huán),當(dāng)?shù)谌蝒cho執(zhí)行完畢之后,整條for語(yǔ)句才算執(zhí)行完畢,此時(shí),將執(zhí)行下一條語(yǔ)句,也就是pause命令。

 高級(jí)用法:

1)搜索當(dāng)前目錄下有哪些文件?

@echo off
for %%i in (*.*) do echo "%%i"
pause

2)搜索當(dāng)前目錄下所有的文本文件?

@echo off
for %%i in (*.txt) do echo "%%i"
pause

看完上述內(nèi)容,你們掌握怎么在bat腳本中使用for循環(huán)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI