




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、批處理命令 For循環(huán)命令詳解! 分類: 教程全集安全防護2010-06-11 13:0416793人閱讀評論(0)收藏舉報command擴展pathideacstring批處理for命令詳解FOR這條命令基本上都被用來處理文本,但還有其他一些好用的功能!看看他的基本格式(這里我引用的是批處理中的格式,直接在命令行只需要一個%號)FOR 參數(shù) %變量名 IN (相關文件或命令) DO 執(zhí)行的命令參數(shù):FOR有4個參數(shù) /d /l /r /f 他們的作用我在下面用例子解釋%變量名 :這個變量名可以是小寫a-z或者大寫A-Z,他們區(qū)分大小寫,FOR會把每個讀取到的值給他;IN:命令的格式,照寫就是
2、了;(相關文件或命令) :FOR要把什么東西讀取然后賦值給變量,看下面的例子do:命令的格式,照寫就是了!執(zhí)行的命令:對每個變量的值要執(zhí)行什么操作就寫在這.可以在CMD輸入for /?看系統(tǒng)提供的幫助!對照一下FOR %variable IN (set) DO command command-parameters%variable 指定一個單一字母可替換的參數(shù)。(set) 指定一個或一組文件??梢允褂猛ㄅ浞?。command 指定對每個文件執(zhí)行的命令。command-parameters為特定命令指定參數(shù)或命令行開關?,F(xiàn)在開始講每個參數(shù)的意思/d 僅為目錄 如果 Set (也就是我上面寫的 &q
3、uot;相關文件或命令") 包含通配符(* 和 ?),將對與 Set 相匹配的每個目錄(而不是指定目錄中的文件組)執(zhí)行指定的 Command。系統(tǒng)幫助的格式:FOR /D %variable IN (set) DO command他主要用于目錄搜索,不會搜索文件,看這樣的例子echo offfor /d %i in (*) do echo %ipause把他保存放在C盤根目錄執(zhí)行,就會把C盤目錄下的全部目錄名字打印出來,而文件名字一個也不顯示!在來一個,比如我們要把當前路徑下文件夾的名字只有1-3個字母的打出來echo offfor /d %i in (?) do echo %ipa
4、use這樣的話如果你當前目錄下有目錄名字只有1-3個字母的,就會顯示出來,沒有就不顯示了思考題目:echo offfor /d %i in (window?) do echo %ipause保存到C盤下執(zhí)行,會顯示什么呢?自己看吧!/D參數(shù)只能顯示當前目錄下的目錄名字,這個大家要注意!/R遞歸 進入根目錄樹 Drive:Path,在樹的每個目錄中執(zhí)行 for 語句。如果在 /R 后沒有指定目錄,則認為是當前目錄。如果 Set 只是一個句點 (.),則只枚舉目錄樹。系統(tǒng)幫助的格式:FOR /R drive:path %variable IN (set) DO command上面我們知道,/D只能
5、顯示當前路徑下的目錄名字,那么現(xiàn)在這個/R也是和目錄有關,他能干嘛呢?放心他比/D強大多了!他可以把當前或者你指定路徑下的文件名字全部讀取,注意是文件名字,有什么用看例子!echo offfor /r c:/ %i in (*.exe) do echo %ipause咋們把這個BAT保存到D盤隨便哪里然后執(zhí)行,我會就會看到,他把C盤根目錄,和每個目錄的子目錄下面全部的EXE文件都列出來了,這里的c:/就是目錄了。再來一個echo offfor /r %i in (*.exe) do echo %ipause參數(shù)不一樣了,這個命令前面沒加那個C:/也就是搜索路徑,這樣他就會以當前目錄為搜索路徑,
6、比如你這個BAT你把他防災d:/test目錄下執(zhí)行,那么他就會把D:/test目錄和他下面的子目錄的全部EXE文件列出來!/L迭代數(shù)值范圍 使用迭代變量設置起始值 (Start#),然后逐步執(zhí)行一組范圍的值,直到該值超過所設置的終止值 (End#)。/L 將通過對 Start# 與 End# 進行比較來執(zhí)行迭代變量。如果 Start# 小于 End#,就會執(zhí)行該命令。如果迭代變量超過 End#,則命令解釋程序退出此循環(huán)。還可以使用負的 Step# 以遞減數(shù)值的方式逐步執(zhí)行此范圍內的值。例如,(1,1,5) 生成序列 1 2 3 4 5,而 (5,-1,1) 則生成序列 (5 4 3 2 1)。
7、語法是: 系統(tǒng)幫助的格式:for /L % Variable in (Start#,Step#,End#) do Command 例如:echo offfor /l %i in (1,1,5) do echo %ipause保存執(zhí)行看效果,他會打印從1 2 3 4 5 這樣5個數(shù)字(1,1,5)這個參數(shù)也就是表示從1開始每次加1直到5終止!再看這個例子echo offfor /l %i in (1,1,5) do start cmdpause執(zhí)行后是不是嚇了一跳,怎么多了5個CMD窗口,呵呵!如果把那個 (1,1,5)改成 (1,1,65535)會有什么結果,我先告訴大家,會打開65535個C
8、MD窗口.這么多你不死機算你強!當然我們也可以把那個start cmd改成md %i 這樣就會建立指定個目錄了!名字為1-65535看完這個被我賦予破壞性質的參數(shù)后,我們來看最后一個參數(shù)/f含有/F的for詳細說明含有/F的for有很大的用處,在批處理中使用的最多,用法如下:格式:FOR /F "options" %i IN (file) DO commandFOR /F "options" %i IN ("string") DO commandFOR /F "options" %i IN ('comman
9、d') DO command這個可能是最常用的,也是最強的命令,主要用來處理文件和一些命令的輸出結果。file代表一個或多個文件string 代表字符串command代表命令"options" 可選對于FOR /F %i IN (file) DO commandfile為文件名,按照官方的說法是,for會依次將file中的文件打開,并且在進行到下一個文件之前將每個文件讀取到內存,按照每一行分成一個一個的元素,忽略空白的行,看個例子。假如文件a.txt中有如下內容:第1行第1列 第1行第2列 第1行第3列第2行第1列 第2行第2列 第2行第3列第3行第1列 第3行第2
10、列 第3行第3列你想顯示a.txt中的內容,會用什么命令呢?當然是type,type a.txtfor也可以完成同樣的命令:for /f %i in (a.txt) do echo %i還是先從括號執(zhí)行,因為含有參數(shù)/f,所以for會先打開a.txt,然后讀出a.txt里面的所有內容,把它作為一個集合,并且以每一行作為一個元素,所以會產生這樣的集合,“第1行第1列 第1行第2列 第1行第3列”, /第一個元素“第2行第1列 第2行第2列 第2行第3列”, /第二個元素“第3行第1列 第3行第2列 第3行第3列” /第三個元素集合中只有3個元素,同樣用%i依次代替每個元素,然后執(zhí)行do后面的命令
11、。具體過程:用%i代替“第1行第1列 第1行第2列 第1行第3列”,執(zhí)行do后面的echo %i,顯示“第1行第1列 第1行第2列 第1行第3列”,用%i代替“第2行第1列 第2行第2列 第2行第3列”,執(zhí)行echo %i,顯示“第2行第1列 第2行第2列 第2行第3列”,依次,直到每個元素都代替完為止。為了加強理解/f的作用,請執(zhí)行一下兩個命令,對比即可明白:for /f %i in (a.txt) do echo %i /這個會顯示a.txt里面的內容,因為/f的作用,會讀出a.txt中 的內容。for %i in (a.txt) do echo %i /而這個只會顯示a.txt這個名字,
12、并不會讀取其中的內容。通過上面的學習,我們發(fā)現(xiàn)for /f會默認以每一行來作為一個元素,但是如果我們還想把每一行再分解更小的內容,該怎么辦呢?不用擔心,for命令還為我們提供了更詳細的參數(shù),使我們將每一行分為更小的元素成為可能。它們就是:delims和tokensdelims 用來告訴for每一行應該拿什么作為分隔符,默認的分隔符是空格和tab鍵比如,還是上面的文件,我們執(zhí)行下面的命令:for /f "delims= " %i in (a.txt) do echo %i顯示的結果是:第1行第1列第2行第1列第3行第1列為什么是這樣的呢。因為這里有了delims這個參數(shù),=后
13、面有一個空格,意思是再將每個元素以空格分割,默認是只取分割之后的第一個元素。執(zhí)行過程是:將第一個元素“第1行第1列 第1行第2列 第1行第3列”分成三個元素:“第1行第1列” “第1行第2列” “第1行第3列”,它默認只取第一個,即“第1行第1列”,然后執(zhí)行do后面的命令,依次類推。但是這樣還是有局限的,如果我們想要每一行的第二列元素,那又如何呢?這時候,tokens跳出來說,我能做到。它的作用就是當你通過delims將每一行分為更小的元素時,由它來控制要取哪一個或哪幾個。還是上面的例子,執(zhí)行如下命令:for /f "tokens=2 delims= " %i in (a.
14、txt) do echo %i執(zhí)行結果:第1行第2列第2行第2列第3行第2列如果要顯示第三列,那就換成tokens=3。同時tokens支持通配符*,以及限定范圍。如果要顯示第二列和第三列,則換成tokens=2,3或tokens=2-3,如果還有更多的則為:tokens=2-10之類的。此時的命令為:for /f "tokens=2,3 delims= " %i in (a.txt) do echo %i %j怎么多出一個%j?這是因為你的tokens后面要取每一行的兩列,用%i來替換第二列,用%j來替換第三列。并且必須是按照英文字母順序排列的,%j不能換成%k,因為i后
15、面是j執(zhí)行結果為:第1行第2列 第1行第3列第2行第2列 第2行第3列第3行第2列 第3行第3列對以通配符*,就是把這一行全部或者這一行的剩余部分當作一個元素了。比如:for /f "tokens=* delims= " %i in (a.txt) do echo %i執(zhí)行結果為:第1行第1列 第1行第2列 第1行第3列第2行第1列 第2行第2列 第2行第3列第3行第1列 第3行第2列 第3行第3列其實就跟for /f %i in (a.txt) do echo %i的執(zhí)行結果是一樣的。再如:for /f "tokens=2,* delims= " %i
16、 in (a.txt) do echo %i %j執(zhí)行結果為:第1行第2列 第1行第3列第2行第2列 第2行第3列第3行第2列 第3行第3列用%i代替第二列,用%j代替剩余的所有最后還有skip和eol,這倆個簡單,skip就是要忽略文件的前多少行,而eol用來指定當一行以什么符號開始時,就忽略它。比如:for /f "skip=2 tokens=*" %i in (a.txt) do echo %i結果為:第3行第1列 第3行第2列 第3行第3列用skip來告訴for跳過前兩行。如果不加tokens=*的話,執(zhí)行結果為:第3行第1列不知道怎么回事。再如,當a.txt內容變
17、成:.第1行第1列 第1行第2列 第1行第3列.第2行第1列 第2行第2列 第2行第3列第3行第1列 第3行第2列 第3行第3列執(zhí)行for /f "eol=. tokens=*" %i in (a.txt) do echo %i結果是:第3行第1列 第3行第2列 第3行第3列用eol來告訴for忽略以“.”開頭的行。同樣也必須加tokens=*,否則只會顯示“第3行第1列=終極dos批處理循環(huán)命令詳解格式:FOR 參數(shù) %變量名 IN (相關文件或命令) DO 執(zhí)行的命令作用:對一個或一組文件,字符串或命令結果中的每一個對象執(zhí)行特定命令,達到我們想要的結果。注意:在批處理文
18、件中使用 FOR 命令時,指定變量請使用 %variable,而不要用 %variable。變量名稱是區(qū)分大小寫的,所以 %i 不同于 %I.關于:for命令可以帶參數(shù)或不帶參數(shù),帶參數(shù)時支持以下參數(shù):/d /l /r /f下面分別解釋一下=零:無參數(shù)時:-FOR %variable IN (set) DO command command-parameters%variable 指定一個單一字母可替換的參數(shù)。(set) 指定一個或一組文件??梢允褂猛ㄅ浞?。command 指定對每個文件執(zhí)行的命令。command-parameters為特定命令指定參數(shù)或命令行開關。TTT示例:for %i in
19、 (t*.*) do echo %i -顯示當前目錄下與t*.*相匹配的文件(只顯示文件名,不顯示路徑) for %i in (d:/mydocuments/*.doc) do echo %i -顯示d:/mydocuments/目錄下與*.doc相匹配的文件=一、參數(shù) /d (參數(shù)只能顯示當前目錄下的目錄名字)-格式:FOR /D %variable IN (set) DO command command-parameters這個參數(shù)主要用于目錄搜索,不會搜索文件,/D 參數(shù)只能顯示當前目錄下的目錄名字。(TTT特別說明:只會搜索指定目錄下的目錄,不會搜索再下一級的目錄。)TTT示例:for
20、 /d %i in (c:/*) do echo %i -顯示c盤根目錄下的所有目錄for /d %i in (?) do echo %i -顯示當前目錄下名字只有1-3個字母的目錄=二、參數(shù) /R (搜索指定路徑及所有子目錄中與set相符合的所有文件)-格式:FOR /R drive:path %variable IN (set) DO command command-parameters此命令會搜索指定路徑及所有子目錄中與set相符合的所有文件,注意是指定路徑及所有子目錄。1、set中的文件名如果含有通配符(?或*),則列舉/R參數(shù)指定的目錄及其下面的所用子目錄中與set相符合的所有文件,
21、無相符文件的目錄則不列舉。2、如果set中為具體文件名,不含通配符,則枚舉該目錄樹(即列舉該目錄及其下面的所有子目錄)(并在后面加上具體的文件名),而不管set中的指定文件是否存在。例:for /r c:/ %i in (*.exe) do echo %i -把C盤根目錄,和每個目錄的子目錄下面全部的EXE文件都列出來了!TTT示例: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 i
22、f exist %i echo %i -很好的搜索命令,列舉boot.ini存在的目錄=三、參數(shù) /L (該集表示以增量形式從開始到結束的一個數(shù)字序列??梢允褂秘摰?Step)-格式:FOR /L %variable IN (start,step,end) DO command command-parameters該集表示以增量形式從開始到結束的一個數(shù)字序列??梢允褂秘摰?StepTTT示例:for /l %i in (1,1,5) do echo %i -輸出1 2 3 4 5for /l %i in (1,2,10) do echo %i -輸出1,3,5,7,9 for /l %i in
23、 (100,-20,1) do echo %i -輸出100,80,60,40,20for /l %i in (1,1,5) do start cmd -打開5個CMD窗口for /l %i in (1,1,5) do md %i -建立從15共5個文件夾for /l %i in (1,1,5) do rd /q %i -刪除從15共5個文件夾四、參數(shù) /F (使用文件解析來處理命令輸出、字符串及文件內容。)-這個參數(shù)是最難的,參數(shù)又多,先簡單的解釋一下:for命令帶這個參數(shù)可以分析文件內容,字符串內容或某一命令輸出的結果,并通過設置option得我們想要的結果。以下是某高手的解釋,感覺有點太
24、專業(yè)了,自認為不太容易理解,也列一下:迭代及文件解析-使用文件解析來處理命令輸出、字符串及文件內容。使用迭代變量定義要檢查的內容或字符串,并使用各種options選項進一步修改解析方式。使用options令牌選項指定哪些令牌應該作為迭代變量傳遞。請注意:在沒有使用令牌選項時,/F 將只檢查第一個令牌。文件解析過程包括讀取輸出、字符串或文件內容,將其分成獨立的文本行以及再將每行解析成零個或更多個令牌。然后通過設置為令牌的迭代變量值,調用 for 循環(huán)。默認情況下,/F 傳遞每個文件每一行的第一個空白分隔符號。跳過空行。+格式:FOR /F "options" %variabl
25、e IN (file-set) DO command command-parametersFOR /F "options" %variable IN ("string") DO command command-parametersFOR /F "options" %variable IN ('command') DO command command-parameters或者,如果有 usebackq 選項:FOR /F "options" %variable IN (file-set) DO com
26、mand command-parametersFOR /F "options" %variable IN ("string") DO command command-parametersFOR /F "options" %variable IN ('command') DO command command-parametersTTT說明:以上是WinXP系統(tǒng)中的幫助內容,你可以注意到,兩者完全相同,這其實是系統(tǒng)的錯誤,第二段“如果有 usebackq 選項:”應該以下的內容:FOR /F "options&q
27、uot; %variable IN ("file-set") DO command command-parametersFOR /F "options" %variable IN ('string') DO command command-parametersFOR /F "options" %variable IN (command) DO command command-parameters -(command中的引號為反引號,是鍵盤上數(shù)字1左面的那個鍵)+(TTT說明:下面是詳細的解釋,大部分是系統(tǒng)中的幫助內容,
28、也有些錯誤(怪不得for命令這么難學),已經被我糾正了。)1) OPTION關鍵字詳解:eol=c:指一個行注釋字符的結尾(就一個)。例如:eol=; -忽略以分號打頭的那些行;skip=n:指在文件開始時忽略的行數(shù)。例如:skip=2 -忽略2行;delims=xxx:指分隔符集。這個替換了空格和跳格鍵的默認分隔符集。例如:delims=, -指定用逗號,空格對字符串進行分隔。tokens=x,y,m-n:指每行的哪一個符號被傳遞到每個迭代的 for 本身。這會導致額外變量名稱的分配。m-n格式為一個范圍。通過 nth 符號指定 mth。如果符號字符串中的最后一個字符是星號,那么額外的變量將
29、在最后一個符號解析之后分配并接受行的保留文本。例如:tokens=2,3* -將每行中的第二個和第三個符號傳遞給 for 程序體;tokens=2,3* . i% -將會把取到的第二個字符串賦給i%,第三個賦給j%,剩下的賦給k%。關于usebackq,不同版本的系統(tǒng)提示不同的幫助,不過都有助于理解,所以都摘抄如下:(1),usebackq:使用后引號(鍵盤上數(shù)字1左面的那個鍵)。未使用參數(shù)usebackq時:file-set表示文件,不能加引號,所以不能含有空格;加雙引號表示字符串,即"string";加單引號表示執(zhí)行命令,即'command'。使用參數(shù)u
30、sebackq時:file-set和"file-set"都表示文件,當文件路徑或名稱中有空格時,就可以用雙引號括起來;單引號表示字符串,即'string';后引號表示命令執(zhí)行,即command。(此段是WinXP系統(tǒng)中的幫助)(2),usebackq:指定新語法已在下類情況中使用:在作為命令執(zhí)行一個后引號的字符串;并且一個單引號字符為文字字符串命令;并允許在filenameset中使用雙引號擴起文件名稱。以上兩條結合著看,其實已經可以明白了,我再說明一下:其實這個參數(shù)的目的就是為了處理帶有空格的文件名。如果您要處理的文件名和路徑中含有空格,如果直接使用,會提
31、示找不到文件。如果你用雙引號將文件名和路徑括起來。這時候將作為字符串處理,而不是作為文件了。為了應對這種情況,所以才增加了這個“usebackq”參數(shù)。如果使用了這個參數(shù),對于括號中的加雙引號的集合,系統(tǒng)就可以認為是文件了;真正的字符串要加單引號;命令要加反引號。2) file-set 為一個或多個文件名。繼續(xù)到 file-set 中的下一個文件之前,每份文件都已被打開、讀取并經過處理。處理包括讀取文件,將其分成一行行的文字,然后將每行解析成零或更多的符號。然后用已找到的符號字符串變量值調用 For 循環(huán)。以默認方式,/F 通過每個文件的每一行中分開的第一個空白符號。跳過空白行。您可通過指定可
32、選 "options"參數(shù)替代默認解析操作。這個帶引號的字符串包括一個或多個指定不同解析選項的關鍵字。3) %i:專門在 for 語句中得到說明,%j 和 %k 是通過tokens= 選項專門得到說明的。您可以通過 tokens= 一行指定最多 26 個符號,只要不試圖說明一個高于字母 'z' 或'Z' 的變量。請記住,F(xiàn)OR 變量是單一字母、分大小寫和全局的;而且,同時不能有 52 個以上都在使用中。(TTT補充說明:一般在tokens后只指定第一個參數(shù),如%i或%a,在后面使用第二個及兩個以上的參數(shù),自動按順序往下排即可。如前面指定的是%
33、a,后面則用%b代表第二個結果,%c代表第 三個結果。測試了一下tokens后指定多個變量名,沒有測試成功,應該是不可以的。所以token后只能跟要使用的第一個變量名如果使用的變量名超過了%z或%Z,就無法使用了,曾經以為會循環(huán)過來:如%z后可以使用%a或%A,但經測試,這是不可以的。如:for /f "tokens=1,2,3* delims=-, " %y in ("aa bb,cc-dd ee") do echo %y %z %A %a -只會輸出前兩個字符串,后面的兩個變量是無效的。)+以下是系統(tǒng)提供的范例:FOR /F "eol=;
34、tokens=2,3* delims=, " %i in (myfile.txt) do echo %i %j %k -說明:會分析 myfile.txt 中的每一行,eol=; -忽略以分號打頭的那些行;tokens=2,3* -將每行中的第二個和第三個符號傳遞給 for 程序體;delims= , -用逗號和/或空格定界符號。%i -這個 for 程序體的語句引用 %i 來取得取得的首個字符串(本例中為第二個符號),引用 %j 來取得第二個字符串(本例中為第三個符號)引用 %k來取得第三個符號后的所有剩余符號。(TTT說明:上述例子和說明中明顯的錯誤,%i應該換為%i(幫助中有明
35、確的說明:指定變量請使用 %variable,而不要用 %variable,誤導)+TTT:下面列我做的幾個例子:1,分析文件的例子FOR /F "eol=; tokens=1,2* delims=,- " %i in (d:/test.txt) do echo %i %j %k2,分析字符串的例子:for /f "tokens=1,2,3* delims=-, " %i in ("aa bb,cc-dd ee") do echo %i %j %k %l3,分析命令輸出的例子:FOR /F "tokens=1* delims
36、=" %i IN ('set') DO echo %i-%j如果使用了usebackq參數(shù)后,命令如下,結果與上面的完全相同。1,分析文件的例子FOR /F "usebackq eol=; tokens=1,2* delims=,- " %i in ("d:/test.txt") do echo %i %j %k2,分析字符串的例子:for /f "usebackq tokens=1,2,3* delims=-, " %i in ('aa bb,cc-dd ee') do echo %i %j
37、 %k %l3,分析命令輸出的例子:(會枚舉當前環(huán)境中的環(huán)境變量名稱和值。)FOR /F "usebackq tokens=1* delims=" %i IN (set) DO echo %i-%j結果大家可以試一下,很容易就明白的。=FOR命令中的變量 -FOR 變量參照的替換已被增強。您現(xiàn)在可以使用下列選項語法:I - 刪除任何引號("),擴充 %I%fI - 將 %I 擴充到一個完全合格的路徑名%dI - 僅將 %I 擴充到一個驅動器號%pI - 僅將 %I 擴充到一個路徑%nI - 僅將 %I 擴充到一個文件名%xI - 僅將 %I 擴充到一個文件擴展名%
38、sI - 擴充的路徑只含有短名%aI - 將 %I 擴充到文件的文件屬性%tI - 將 %I 擴充到文件的日期/時間%zI - 將 %I 擴充到文件的大小%$PATH:I - 查找列在路徑環(huán)境變量的目錄(TTT提示:是環(huán)境變量path的目錄),并將 %I 擴充到找到的第一個完全合格的名稱。如果環(huán)境變量名未被定義,或者沒有找到文件,此組合鍵會擴充到空字符串此外,還可以組合修飾符來得到多重結果:%dpI - 僅將 %I 擴充到一個驅動器號和路徑%nxI - 僅將 %I 擴充到一個文件名和擴展名%fsI - 僅將 %I 擴充到一個帶有短名的完整路徑名%dp$PATH:i - 查找列在路徑環(huán)境變量的目
39、錄,并將 %I 擴充到找到的第一個驅動器號和路徑。 %ftzaI - 將 %I 擴充到類似輸出線路的 DIR在以上例子中,%I 和 PATH 可用其他有效數(shù)值代替。% 語法用一個有效的 FOR 變量名終止。選取類似 %I 的大寫變量名比較易讀,而且避免與不分大小寫的組合鍵混淆。(以上是系統(tǒng)幫助的內容)我們可以看到每行都有一個大寫字母"I",這個I其實就是我們在FOR帶入的變量,例如:FOR /F "usebackq eol=; tokens=1,2* delims=,- " %x in ("d:/test.txt") do echo
40、%x %y %z這里我們就要把那個x,y,z改成%fx,%fy,%fz。+TTT特例:以下是我根據(jù)以上說明作的一個綜合的例子,可以直接復制到記事本里,保存為bat格式(c盤下任一目錄),運行后,可以直觀的看到擴展后的效果。echo offecho -顯示"dir c:/boot.ini /b /ah"for /f "delims=" %i in ('dir c:/boot.ini /b /ah') do echo 不擴展變量 %ifor /f "delims=" %i in ('dir c:/boot.ini
41、/b /ah') do echo 擴展變量到fI %fi -擴充到一個完全合格的路徑名for /f "delims=" %i in ('dir c:/boot.ini /b /ah') do echo 擴展變量到dI %di -僅將變量擴充到一個驅動器號for /f "delims=" %i in ('dir c:/boot.ini /b /ah') do echo 擴展變量到pI %pi -僅將變量擴充到一個路徑for /f "delims=" %i in ('dir c:/boot.
42、ini /b /ah') do echo 擴展變量到nI %ni -僅將變量擴充到一個文件名for /f "delims=" %i in ('dir c:/boot.ini /b /ah') do echo 擴展變量到xI %xi -僅將變量擴充到一個文件擴展名for /f "delims=" %i in ('dir c:/boot.ini /b /ah') do echo 擴展變量到sI %si -擴充的路徑只含有短名for /f "delims=" %i in ('dir c:/bo
43、ot.ini /b /ah') do echo 擴展變量到aI %ai -將變量擴充到文件的文件屬性for /f "delims=" %i in ('dir c:/boot.ini /b /ah') do echo 擴展變量到tI %ti -將變量擴充到文件的日期/時間for /f "delims=" %i in ('dir c:/boot.ini /b /ah') do echo 擴展變量到zI %zi -將變量擴充到文件的大小for /f "delims=" %i in ('dir
44、c:/boot.ini /b /ah') do echo 擴展變量到$PATH:I %$PATH:i -查找列在路徑環(huán)境變量的目錄,并將變量擴充到找到的第一個完全合格的名稱echo -以下顯示組合修飾符來得到多重結果-:for /f "delims=" %i in ('dir c:/boot.ini /b /ah') do echo 擴展變量到dpI %dpi -僅將變量擴充到一個驅動器號和路徑for /f "delims=" %i in ('dir c:/boot.ini /b /ah') do echo 擴展變
45、量到nxI %nxi -僅將變量擴充到一個文件名和擴展名for /f "delims=" %i in ('dir c:/boot.ini /b /ah') do echo 擴展變量到fsI %fsI -僅將變量擴充到一個帶有短名的完整路徑名for /f "delims=" %i in ('dir c:/boot.ini /b /ah') do echo 擴展變量到dp$PATH:I %dp$PATH:i -查找列在路徑環(huán)境變量的目錄,并將變量擴充到找到的第一個驅動器號和路徑for /f "delims="
46、; %i in ('dir c:/boot.ini /b /ah') do echo 擴展變量到ftzaI %ftzai -將變量擴充到類似輸出線路的DIRecho.echo -顯示"dir C:/WINDOWS/system32/notepad.exe /b"for /f "delims=" %i in ('dir C:/WINDOWS/system32/notepad.exe /b') do echo 不擴展變量 %ifor /f "delims=" %i in ('dir C:/WINDO
47、WS/system32/notepad.exe /b') do echo 擴展變量到fI %fi -擴充到一個完全合格的路徑名for /f "delims=" %i in ('dir C:/WINDOWS/system32/notepad.exe /b') do echo 擴展變量到dI %di -僅將變量擴充到一個驅動器號for /f "delims=" %i in ('dir C:/WINDOWS/system32/notepad.exe /b') do echo 擴展變量到pI %pi -僅將變量擴充到一個路
48、徑for /f "delims=" %i in ('dir C:/WINDOWS/system32/notepad.exe /b') do echo 擴展變量到nI %ni -僅將變量擴充到一個文件名for /f "delims=" %i in ('dir C:/WINDOWS/system32/notepad.exe /b') do echo 擴展變量到xI %xi -僅將變量擴充到一個文件擴展名for /f "delims=" %i in ('dir C:/WINDOWS/system32/
49、notepad.exe /b') do echo 擴展變量到sI %si -擴充的路徑只含有短名for /f "delims=" %i in ('dir C:/WINDOWS/system32/notepad.exe /b') do echo 擴展變量到aI %ai -將變量擴充到文件的文件屬性for /f "delims=" %i in ('dir C:/WINDOWS/system32/notepad.exe /b') do echo 擴展變量到tI %ti -將變量擴充到文件的日期/時間for /f &quo
50、t;delims=" %i in ('dir C:/WINDOWS/system32/notepad.exe /b') do echo 擴展變量到zI %zi -將變量擴充到文件的大小for /f "delims=" %i in ('dir C:/WINDOWS/system32/notepad.exe /b') do echo 擴展變量到$PATH:I %$PATH:i -查找列在路徑環(huán)境變量的目錄,并將變量擴充到找到的第一個完全合格的名稱echo -以下顯示組合修飾符來得到多重結果-:for /f "delims=&q
51、uot; %i in ('dir C:/WINDOWS/system32/notepad.exe /b') do echo 擴展變量到dpI %dpi -僅將變量擴充到一個驅動器號和路徑for /f "delims=" %i in ('dir C:/WINDOWS/system32/notepad.exe /b') do echo 擴展變量到nxI %nxi -僅將變量擴充到一個文件名和擴展名for /f "delims=" %i in ('dir C:/WINDOWS/system32/notepad.exe /
52、b') do echo 擴展變量到fsI %fsI -僅將變量擴充到一個帶有短名的完整路徑名for /f "delims=" %i in ('dir C:/WINDOWS/system32/notepad.exe /b') do echo 擴展變量到dp$PATH:I %dp$PATH:i -查找列在路徑環(huán)境變量的目錄,并將變量擴充到找到的第一個驅動器號和路徑for /f "delims=" %i in ('dir C:/WINDOWS/system32/notepad.exe /b') do echo 擴展變量到
53、ftzaI %ftzai -將變量擴充到類似輸出線路的DIRPauseTTT說明:1,以上命令中,%fsI無法顯示,估計是系統(tǒng)錯誤,因為%fI是擴充到一個完全合格的路徑名,%sI只含有短文件名,本身是相互矛盾的,所以出錯。不知是系統(tǒng)的錯誤還是在考我們2,以上命令如果保存在別的盤中,無法顯示正確的驅動器和路徑。3,如果想要%dp$PATH:i正常顯示,要保證環(huán)境變量path中確實有這個路徑:C:/WINDOWS/system32。下面依次說明一下:+一、 I - 刪除任何引號("),擴展 %I-這個變量的作用就如他的說明,刪除引號!刪除引號規(guī)則如下(BAT兄補充!):1、若字符串首尾同
54、時存在引號,則刪除首尾的引號;2、若字符串尾不存在引號,則刪除字符串首的引號;3、如果字符串中間存在引號,或者只在尾部存在引號,則不刪除。龍卷風補充:無頭不刪,有頭連尾刪。我們來看這個例子,首先建立臨時文件temp.txt,內容如下"1111"2222"3333""4444"44"55"55"55也可建立個BAT文件代碼如下:echo offecho "1111>temp.txtecho "2222">>temp.txtecho 3333">
55、>temp.txtecho "4444"44>>temp.txtecho "55"55"55>>temp.txtrem 上面建立臨時文件,注意不成對的引號要加轉義字符,重定向符號前不要留空格FOR /F "delims=" %i IN (temp.txt) DO echo %ipausedel temp.txt執(zhí)行后,我們看CMD的回顯如下:1111 #字符串前的引號被刪除了2222 #字符串首尾的引號都被刪除了3333" #字符串前無引號,后面的引號保留4444"44 #字
56、符串前面的引號刪除了,而中間的引號保留55"55"55 #字符串前面的引號刪除了,而中間的引號保留請按任意鍵繼續(xù). . .結果和之前temp.txt中的內容對比一下,我們會發(fā)現(xiàn)第1、2、5行的引號都消失了,這就是刪除引號i的作用了!+二、 %fI - 將 %I 擴展到一個完全合格的路徑名示例:把代碼保存放在隨便哪個地方,我這里就放桌面吧.FOR /F "delims=" %i IN ('dir /b') DO echo %fipause執(zhí)行后顯示內容如下C:/Documents and Settings/Administrator/桌面/test.batC:/Documents and Settings/Administrator/桌面/test.vbs當我把代碼中的 %fi直接改成%iFOR /F "delims=" %i IN ('dir /b') DO echo %ipause執(zhí)行后就會顯示以下內容:test.battest.vbs通過對比
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZSA 278-2024 軌道交通.用銑磨機器人
- 2025年度高新技術企業(yè)員工離職競業(yè)限制補償金合同
- 二零二五年度教育行業(yè)人才招聘定金協(xié)議
- 二零二五年度金融機構間反洗錢合作協(xié)議
- 2025年度金融項目評審合同風險控制
- 二零二五商場合同管理操作手冊附小時計費服務條款
- 2025年度環(huán)保產業(yè)合作開發(fā)合伙協(xié)議書
- 二零二五年度供用熱力合同糾紛司法解釋及執(zhí)行難點解析
- 二零二五年度超市促銷活動商品陳列策劃合同
- 2025沈陽公司總經理聘用合同全面規(guī)范管理細則
- 醫(yī)務人員醫(yī)德醫(yī)風培訓
- 人教版初中歷史八上-第2課 第二次鴉片戰(zhàn)爭
- 黑龍江省哈爾濱市2024年高三一模試題(數(shù)學試題理)試題
- 全國計算機等級考試一級試題及答案(5套)
- 公司安全事故隱患內部舉報、報告獎勵制度
- 產品方案設計模板
- 部隊通訊員培訓
- 2024-2030年中國企業(yè)在安哥拉投資建設化肥廠行業(yè)供需狀況及發(fā)展風險研究報告版
- 物業(yè)公司水浸、水管爆裂事故應急處置預案
- 河南省公務員面試真題匯編7
- SF-T0095-2021人身損害與疾病因果關系判定指南
評論
0/150
提交評論