bat(續七)-for語句(循環結構)


for語句(循環結構)

  for語句可以實現類似於C語言里面的循環結構,當然for語句的功能要更強大一點,通過不同的開關可以實現更多的功能。for語句有多個開關,不同開關將會實現不同的功能。

   1.無開關
   無開關的for語句能夠對設定的范圍內進行循環,是最基本的for循環語句。其命令格式為:
   FOR %%variable IN (set) DO command
   其中,%%variable是批處理程序里面的書寫格式,在DOS中書寫為%variable,即只有一個百分號(%);set就是需要我們設定的循環范圍,類似於C語言里面的循環變量;do后面的command就是循環所執行的命令,即循環體。
   無開關for語句舉例:
   ===============================================
   @echo off
   for %%i in (a,"b c",d) do echo %%i
   pause>nul
   ===============================================
   2.開關/L
   含開關/L的for語句,可以根據set里面的設置進行循環,從而實現對循環次數的直接控制。其命令格式為:
   FOR /L %%variable IN (start,step,end) DO command
   其中,start為開始計數的初始值,step為每次遞增的值,end為結束值。當end小於start時,step需要設置為負數。
   含開關/L的for語句舉例(創建5個文件夾):
   ===============================================
   @echo off
   for /l %%i in (1,2,10) do md %%i
   pause
   ===============================================
   上例將新建5個文件夾,文件夾名稱依次為1.3.5.7.9。可以發現,%%i的結束值並非end的值10,而是不大於end的一個數。
   3.開關/F
   含開關/F的for語句具有最強大的功能,它能夠對字符串進行操作,也能夠對命令的返回值進行操作,還可以訪問硬盤上的ASCII碼文件,比如txt文檔等。其命令格式為:
   FOR /F ["options"] %%variable IN (set) DO command
   其中,set為("string"、'command'、file-set)中的一個;options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一個或多個的組合。各選項的意義參見for /f。一般情況下,使用較多的是skip、tokens、delims三個選項。
   含開關/F的for語句舉例:
   ===============================================
   @echo off
   echo **No Options:
   for /f %%a in ("1,2,10") do echo a=%%a
   echo **Options tokens ^& delims:
   for /f "tokens=1-3 delims=," %%a in ("1,2,10") do echo a=%%a b=%%b c=%%c
   pause
   ===============================================
   @echo off
   echo 本文件夾里面的文件有:
   for /f "skip=5 tokens=3* delims= " %%a in ('dir') do (
   if not "%%a"=="<DIR>" if not "%%b"=="字節" if not "%%b"=="可用字節" echo %%b
   )
   pause
   ===============================================
   @echo off
   echo 本文件夾里面的文件有:
   dir>c:\file.txt
   for /f "skip=5 tokens=3* delims= " %%a in (c:\file.txt) do (
   if not "%%a"=="<DIR>" if not "%%b"=="字節" if not "%%b"=="可用字節" echo %%b
   )
   del c:\file.txt
   pause
   ===============================================
   對於后面的兩個例子,其中options里面的delims= 是可以刪除的,因為只要添加了/F開關系統就將delims的值默認為空格。
   符號字符串中的最后一個字符星號,
   那么額外的變量將在最后一個符號解析之后
   分配並接受行的保留文本。本例中也可以改為4,不過文件名中有空格的文件,只能顯示空格以前部分
   同時我們也看到了,for語句的do后面的command也是可以分行的,只需要保證command的左括號和do在同一行就可以了。
   4.開關/D或/R
   含開關/D或/R的for語句是與目錄或文件有關的命令,一般情況下很少使用。含開關/R的命令有時候被用於通過遍歷文件夾來查找某一個文件或文件夾,故而列舉此例。
   含開關/R的for語句舉例(文件夾遍歷):
   ===============================================
   @echo off
   setlocal enabledelayedexpansion
   FOR /R d: %%i IN (.) DO (
   set dd=%%i
   set "dd=!dd:~0,-1!"
   echo !dd!
   )
   pause
   exit
   ===============================================
   上例即可以羅列出D盤下的所有文件夾,其速度要比命令"tree d:"慢多了,不過其返回結果的實用性則遠遠超過了tree命令。
   一般情況下我們不推薦通過遍歷文件夾來查找文件,特別是在查找某些程序(比如 QQ.exe)的位置時。推薦通過reg命令查找注冊表來查找QQ的路徑,以保證查找效率。
   上例中也出現了幾個新面孔,如setlocal、感嘆號等。其中,感嘆號其實就是變量百分號(%)的強化版。之所以要用!而不用%,是因為在for循環中,當一個變量被多次賦值時,%dd%所獲取的僅僅是dd第一次被賦予的值;要想刷新dd的值,就必須首先通過命令"setlocal enabledelayedexpansion"來開啟延遲變量開關,然后用!dd!來獲取dd的值。
   for語句是批處理里面功能最強大、使用最普遍卻又最難掌握的一套命令,這也是批處理菜鳥和批處理高手最明顯的一個分水嶺,一旦掌握了這套命令,那么你就離批處理達人不遠了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM