Windows bat指令碼之for迴圈用法
導讀 | 這篇文章主要介紹了Windows bat 之for迴圈用法詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑑價值 |
Windows bat 的for語句基本形態如下:
在cmd視窗中:for %I in (command1) do command2 在批處理檔案中:for %%I in (command1) do command2
之所以要區分cmd視窗和批處理檔案兩種環境,是因為在這兩種環境下, 語句表現出來的行為雖然基本一樣,但是在細節上還是稍有不同,最明顯的一個差異就是:在cmd視窗中,for之後的形式變數I必須使用單百分號引用,即%I;而在批處理檔案中,引用形式變數I必須使用雙百分號,即%%I。為了方便起見,若不是特別強調,以下的講解都以批處理檔案環境為例。
我們先來看一下for語句的基本要素都有些什麼:
- for、in和do是for語句的關鍵字,它們三個缺一不可;
- %%I是for語句中對形式變數的引用,即使變數l在do後的語句中沒有參與語句的執行,也是必須出現的;
- in之後,do之前的括號不能省略;
- command1表示字串或變數,command2表示字串、變數或 語句;
下面來看一個Windows bat指令碼的demo(記為demo1):
@echo off for %%I in (ABC) do echo %%I pause
儲存為.bat檔案(批處理檔案)並執行,將會在彈出的批處理視窗中看到這樣的資訊:
對批處理檔案的for迴圈就是這樣簡單,下面來看看for語句的注意事項,並執行更復雜的for迴圈例項。
- for語句的形式變數I,可以換成26個字母中的任意一個,這些字母會區分大小寫,也就是說,%%I和%%i會被認為不是同一個變數;形式變數I還可以換成其他的字元,但是,為了不與批處理中的%0~%9這10個形式變數發生衝突,請不要隨意把%%I替換為%%0~%%9中的任意一個;
- in和do之間的command1表示的字串或變數可以是一個,也可以是多個,每一個字串或變數,我們稱之為一個元素,每個元素之間,用空格鍵、跳格鍵、逗號、分號或等號分隔;
- for語句依次提取command1中的每一個元素,把它的值賦予形式變數I,帶到do後的command2中參與命令的執行;並且每次只提取一個元素,然後執行一次do後的命令語句,而無論這個元素是否被帶到command2中參與了command2的執行;當執行完一次do後的語句之後,再提取command1中的下一個元素,再執行一次command2,如此迴圈,直到command1中的所有元素都已經被提取完畢,該for語句才宣告執行結束。
有了以上的基礎,我們再來看下面這個例子,這個例子修改了demo1中的部分內容(記為demo2),結果將大不一樣:
@echo off for %%I in (A,B,C) do echo %%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)搜尋當前目錄下有哪些檔案?
@echo off for %%i in (*.*) do echo "%%i" pause
2)搜尋當前目錄下所有的文字檔案?
@echo off for %%i in (*.txt) do echo "%%i" pause
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2772404/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- shell指令碼之迴圈指令碼
- windows bat指令碼睡眠等待WindowsBAT指令碼
- Shell指令碼之for迴圈語句的應用指令碼
- windows 全量+增量備份指令碼batWindows指令碼BAT
- linux系統for迴圈小指令碼Linux指令碼
- 記windows自定義bat指令碼自啟動WindowsBAT指令碼
- Windows ntp時間同步設定(bat指令碼)WindowsBAT指令碼
- windows bat指令碼 後臺執行目標exeWindowsBAT指令碼
- Windows使用bat指令碼指定jdk版本啟動jar包WindowsBAT指令碼JDKJAR
- easytier 在windows上快捷安裝“服務”bat指令碼WindowsBAT指令碼
- Shell指令碼應用 – for、while迴圈語句指令碼While
- Python迴圈結構用法Python
- 常用指令碼學習手冊——Bat指令碼指令碼BAT
- bat指令碼的基本操作BAT指令碼
- 前端各種迴圈用法總結前端
- PyThon range()函式中for迴圈用法Python函式
- 原始碼分析:CyclicBarrier 之迴圈柵欄原始碼
- bat批處理常用指令碼BAT指令碼
- scss中迴圈之@for迴圈佈局畫圓CSS
- 再談Windows訊息迴圈Windows
- Spring原始碼分析之IOC迴圈依賴Spring原始碼
- windows 將bat exe 指令碼執行檔案放到window 當做服務WindowsBAT指令碼
- Java之 迴圈(三)Java
- 【spring原始碼系列】之【Bean的迴圈依賴】Spring原始碼Bean
- 啟停無線網路卡bat指令碼BAT指令碼
- 3.1 spring5原始碼系列--迴圈依賴 之 手寫程式碼模擬spring迴圈依賴Spring原始碼
- 利用VB 指令碼實現TIA 中介面迴圈計數的功能指令碼
- js迴圈中reduce的用法簡單介紹JS
- shell指令碼while迴圈、read讀取控制檯輸入與函式指令碼While函式
- 第22篇 生成proto檔案bat指令碼BAT指令碼
- Windows Ping的結果顯示每次ping的時間的bat批處理指令碼WindowsBAT指令碼
- JS效能優化 之 FOR迴圈JS優化
- 15-python之while迴圈PythonWhile
- react基礎之-- 列表迴圈React
- for 迴圈與 while 迴圈While
- while迴圈 case迴圈While
- C語言——迴圈結構(for迴圈,while迴圈,do-while迴圈)C語言While
- Swoole 原始碼分析——Server模組之ReactorThread事件迴圈(下)原始碼ServerReactthread事件