1. 程式人生 > >語句結構(2)

語句結構(2)

cal and skip span 循環結構 依次 訪問 ria string

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,4 delims= " %%a in (‘dir‘) do ( if not "%%a"=="<DIR>" if not "%%b"=="字節" if not "%%b"=="可用字節" echo %%b ) pause =============================================== @echo off echo 本文件夾裏面的文件有: >c:\file.txt dir for /f "skip=5 tokens=3,4 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的值默認為空格。 同時我們也看到了,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語句是批處理裏面功能最強大、使用最普遍卻又最難掌握的一套命令,這也是批處理菜鳥和批處理高手最明顯的一個分水嶺,一旦掌握了這套命令,那麽你就離批處理達人不遠了!

語句結構(2)