For %variable IN (set) DO 命令 [command-parameters]
• %variable 指定一個可以取代的參數。
• (set) 指定由一或多個檔案組成的檔案組。您可使用通配字元。
• command 指定命令來執行每一個檔案。
• command-parameters
• 為所指定的命令指定變數或參數。
• 如果要在批次程式中使用 For 命令,請指定 %%variable,而不要指定%variable。
• 變數名稱有大小寫的區分,所以 %i 不同於 %I。
如果您啟用擴充命令,則額外支援下列的 For 命令格式:
For /D %variable IN (set) DO command [command-parameters]
• 如果 set 中包含萬用字元,則指定與目錄名稱相符,而不是與檔案名稱相符。
For /R [[drive:]path] %variable IN (set) DO command [command-parameters]
• 在樹狀目錄中切換 [drive:]路徑,並於樹狀目錄的每一個目錄下執行For 陳述式。
• 如果未在 /R 之後指定目錄規格,則採用目前的目錄。
• 如果 set 只是單一句點 (.) 字元,則它只會列舉樹狀目錄結構。
For /L %variable IN (start,step,end) DO command [command-parameters]
• set 是從開頭到結尾一次跳一步的連續數字。
• 所以 (1,1,5) 會產生連續值 (1 2 3 4 5) 而 (5,-1,1) 會產生連續值 (5 4 3 2 1)
For /F ["options"] %variable IN (file-set) DO command [command-parameters]
For /F ["options"] %variable IN ("string") DO command [command-parameters]
For /F ["options"] %variable IN ('command') DO command [command-parameters]
• 或,如果使用 usebackq 選項:
For /F ["options"] %variable IN (file-set) DO command [command-parameters]
For /F ["options"] %variable IN ('string') DO command [command-parameters]
For /F ["options"] %variable IN (`command`) DO command [command-parameters]
• filenameset 可以是一個以上的檔案名稱。
• 每個檔案都已開啟,讀取及處理過,才繼續進行下個檔案名稱組。
• 處理檔案讀取的一致性,將它分成獨立的文字行,然後將每一行分析成零或更多的字串。
• 用已找到的字串值為變數值,來呼叫For 迴圈的內容。
• 預設狀態,/F傳出每個檔案的每一行中,以空格分隔的第一個字串。空白行會被略過。
• 您可以指定 "options" 參數來覆寫預設的分析行為。
• 這是有引號的字串,包含一個以上的關鍵字,來指定不同的分析選項。
-----------------------------------------------------------------------------------------------
For /f 的功能!!!
• 重覆性處理
For %i in (monkey dog monkey) do @echo I love %i
• 顯示目錄中的特定檔案
For %j in (%windir%\*.txt) do type %j
• 從1顯示到100
For /L %i in (1,1,100) do echo %i
• 列出目前所有的目錄
For /D %i in (*) do echo %i
For /f 的使用!!!
• 將指定文檔逐行顯示
For /f %i in (%windir%\system32\eula.txt) do @echo %i
• 剖析文字檔,抓出第2、3個區塊
For /f “delims=, tokens=3,7" %i in (%windir%\svcpack.log) do @echo %i %j
• 剖析字串
For /f "tokens=1,2,3,4" %i in ("my name is jtchen") do @echo your %j is %l, welcome!!
• 將執行結果視為文檔,進行剖析
For /F %i in ('dir/b/ad') do echo %i
• 如果不要剖析呢?? (即希望整行輸出)
• 剖析輸出:秀出目前的環境變數
For /f "delims== tokens=1" %a in ('set') do @echo %a
-----------------------------------------------------------------------------------------------作者: a448488 時間: 2013-8-14 18:55 標題: BAT批次指令: For的功能範例詳解- 一
由於排版問題:部分語法中的FOR指令字元後面的間隔不見~在語法中要注意的~修正後再貼一次~
BAT批次指令: For 的功能範例詳解- 一
-----------------------------------------------------------------------------------------------
• 指令:For
• 說明:在指定的範圍內循環執行指令。
• 備註:在批處理檔案中使用 For 指令時,指定變數請使用 %%variable,而不要用 %variable。
• 用法:For {%variable|%%variable} in (set) do command [command-parameters]
• 參數:%variable 變數。只能是單一字母,分大小寫和全局,所以 %i 不同於 %I。
• (set) 一個或一組檔案。可以使用萬用字元。
• command 對每個檔案執行的指令。
• command-parameters 指令行開關。
-----------------------------------------------------------------------------------------------
帶指令行開關的 For 指令:
用法:For /d %variable in (set) do command [command-parameters]
說明:如果集中包含萬用字元,則指定與目錄名核對,而不與檔案名稱核對。(directory)
• 例 1:For /d %i in (*) do @echo %i
• 作用:目前目錄下的子目錄名。
• 例 2:For /d %i in (*g*) do @echo %i
• 作用:目前目錄下的子目錄名含g的名稱。
用法:For /r [[drive:]path] %variable in (set) do command [command-parameters]
說明:檢查以 [drive:]path 為根的目錄樹。如果在 /r 後沒有指定目錄,則使用目前目錄。
• 如果集僅為一個單點(.)字元,則枚舉該目錄樹。 (root)
• 例 3:For /r %i in (.) do @echo %i
• 作用:枚舉目前目錄下的全部子目錄名路徑。
• 例 4:For /r %i in (*) do @echo %i
• 作用:枚舉目前目錄及子目錄下的全部檔案名稱路徑。
用法:For /l %variable in (start,step,end) do command [command-parameters]
說明:以增量形式從開始到結束一個數字序列。(list)
• 例 5:For /l %i in (1,1,5) do @echo %i
• 作用:產生序列 1 2 3 4 5。
• 例 6:For /l %i in (5,-1,1) do @echo %i
• 作用:產生序列 5 4 3 2 1。
用法:For /f ["options"] %variable in (file-set) do command [command-parameters]
For /f ["options"] %variable in ("string") do command [command-parameters]
For /f ["options"] %variable in ('command') do command [command-parameters]
說明:file-set為一個或多個檔案名稱。/f 分析每個檔案的每一行,跳過空白行。"options" 關鍵字:
eol=c - 行註解字元的結尾(就一個)
skip=n - 在檔案開始時略過的行數。
delims=xxx - 分隔符集。取代空格和跳格鍵的預設分隔符集。
tokens=x,y,m-n - 每行的哪一個符號被傳遞到每個迭代的 For 本身。這會導致額外變數名稱的分配。
m-n 格式為一個範圍。透過 nth 符號指定 mth。如果符號字串中的最後一個字元星號,
那麼額外的變數將在最後一個符號解析之後分配並接受行的保留文字。
usebackq
在作為指令執行一個後引號的字串並且一個單引號字元為文字字串指令
並允許在 filenameset中使用雙引號擴起檔案名稱。
• 例 7:For /f "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
• 作用:分析 myfile.txt 中的不以分號開頭(eol=;)的行,將每行按逗號和空格分成幾段(delims=; ),
• 再將每行的第2段、第3段及第3段以後的剩餘段分別賦值給變數%i、%j、%k。
• 對於帶有空格的檔案名稱,需要用雙引號將檔案名稱括起來。
• 例 8:For /f "usebackq delims==" %i in (`set`) do @echo %i
• 作用:枚舉目前環境中的環境變數名稱。
下面我們舉幾個例子來具體說明一下For 指令在入侵中的用途。
• 例 9:For /f %%i in (dict.txt) do net use \\ip\ipc$>D:\ok.txt
• 分析:利用For 指令來實現對一台目標winnt主機的暴力密碼破解。
• 我們用net use指令嘗試和目標主機進行連接,當成功時記下密碼。
• 用%i來表示administrator的密碼,%i的值在dict.txt中取得,然後將程式運行結果傳遞給find指令,ok.txt中的值即為目標主機的密碼。
• 例10:For /f 「tokens=1,2,3 delims= 」 %%i in (victim.txt) do start call door.bat %%i %%j %%k
• 分析:自動給大量肉雞種後門和木馬。該指令按順序將victim.txt中的內容傳遞給door.bat中的參數%i %j %k。