對壹組文件中的每個文件運行指定的命令。
可以在批處理程序中或直接從命令提示符使用 for 命令。
要在批處理程序中使用 for 命令,請使用以下語法:
for %%variable in (set) docommand [command-parameters]
要在命令提示符下使用 for,請使用以下語法: (區別就是在於變量前的%)
for %variable in (set) do command [command-parameters]
參數
%%variable 或 %variable
代表可替換的參數。for 命令使用在 set 中指定的每個文本字符串替換 %%variable(或 %variable),直到此命令(在 command-parameters 中指定)處理所有的文件為止。使用 %% variable 在批處理程序中執行 for 命令。使用 % variable 通過命令提示符執行 for 命令。變量名區分大小寫。
(set)
指定要用指定的命令處理的壹個或多個文件或文本字符串。需要括號。
command
指定要在指定的 set 所包含的每個文件上執行的命令。
command-parameters
指定要用於指定命令(如果指定的命令要使用任何參數或開關)的任何參數或開關。
二.for 命令的其他形式
如果啟用了命令擴展,將支持如下 for 命令的其他格式:
只限於目錄
for /d [%% | %]variable in (set) docommand [command-parameters]
如果 set 包含通配符(* 和 ?),則指定與目錄名匹配,而不是文件名。
遞歸
for /r [[drive :]path] [%% | %]variable in (set) docommand [command-parameters]
進入根目錄樹[drive:]path,在樹的每個目錄中執行 for 語句。如果在 /r 後沒有指定目錄,則假定為當前目錄。如果 set 只是壹個句號 (.) 字符,則只列舉目錄樹。
叠代
for /l [%% | %]variable in (start,step,end) do command [command-parameters]
集合是壹系列按步長量劃分的、從頭到尾的數字。這樣,(1,1,5) 將生成序列 1 2 3 4 5,而 (5,-1,1) 將生成序列 (5 4 3 2 1)。
文件解析
for /f ["options"] [%% | %]variable in (filenameset) do command [command-parameters]
for /f ["options"] [%% | %]variable in ("literal string") do command[command-parameters]
for /f ["options"] [%% | %]variable in (‘command‘) do command [command-parameters]
或者,如果出現 usebackq 選項:
for /f ["options"] [%% | %]variable in (filenameset) do command [command-parameters]
for /f ["options"] [%% | %]variable in (‘literal string‘) do command [command-parameters]
for /f ["options"] [%% | %]variable in (`command`) docommand [command-parameters]
三.for使用範例
顯示目錄中的文件
假定要使用 type 命令顯示當前目錄中擴展名為 .doc 或 .txt 的所有文件內容。為此,為了使用可替換變量 %f,請在命令提示符後鍵入以下命令:
for %f in (*.doc *.txt) do type %f
在此範例中,當前目錄中擴展名為 .doc 或 .txt 的每個文件都被替代為變量 %f ,直到每個文件的內容都顯示為止。要在批處理文件中使用該命令,只需使用 %%f 替換 %f 的事件。否則,windows 2000 將忽略變量並顯示錯誤信息。
重定向輸出到打印機
windows 2000 支持在指定命令中使用的命令開關、管道和重定向。例如,要將上例中的輸出重定向到 prn(默認的打印機端口),可以鍵入下面的命令:
for %f in (*.doc *.txt) do type %f >; prn:
解析文件
要分析文件並忽略註釋行,可以使用:
for /f "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k
這將解析 myfile.txt 文件的每壹行,忽略以分號開頭的行,將第二和第三個令牌環傳遞到 for 正文中,令牌環通過逗號和/或空格分隔。註意:for 語句引用 %i 以獲得第二個令牌,引用 %j 以獲得第三個令牌,引用 %k 以獲得第三個令牌之後其余的全部令牌。對於包含空格的文件名,必須在文件名兩端加上雙引號。為了以此方式使用雙引號,還需要使用 usebackq 選項,否則雙引號將被解釋為定義了要解析的文字字符串。
%i 在 for 語句中明確聲明,並且 %j 和 %k 使用 tokens= option 隱含聲明。如果它不會導致嘗試聲明高於字母“z”或“z”的某個變量,使用 tokens= 行可以指定最多 26 個標記。
記住,for 變量名區分大小寫、全局的,並且每次總體不超過 52 個是活動的。
解析字符串
也可以對相鄰的字符串使用 for /f 分析邏輯,方法是使括號之間的 filenameset 為壹個用單引號引起來的字符串。將它當作文件的單行輸入並進行解析。
解析輸出
最後,可以使用 for /f 命令來對命令的輸出結果進行解析。通過使 filenameset 在反引字符串的括號之間來執行此操作。將它作為命令行,此命令被傳遞給子 cmd.exe 並將輸出捕獲到內存並進行解析,就象它是壹個文件壹樣。因此,下面的範例:
for /f "usebackq delims==" %i in (`set`) do @echo %i
這將列舉當前環境中的環境變量名。
四.針對網絡探測時使用for命令
1. for /f “tokens=1,2*” %i in (filename.txt) do net use \\target\ipc$ %i /u:%j
呵呵,首先/f的參數的含意是解析文件的意思。這將解析 filename.txt 文件的每壹行,將第壹和第二個令牌環傳遞到 for 正文中,令牌環通過逗號和/或空格分隔。註意:for 語句引用 %i 以獲得第壹個令牌,引用 %j 以獲得第二個令牌。(註:我也不大明白令牌在這具體意思,不過可以確定的就是第壹個令牌就是每行的第壹個字符竄,第二個令牌就是用空格分開的第二個字符竄。呵呵,至於*的意思是這樣的,在令牌 = 字符串中最後壹個字符是星號,則將分配附加的變量,並在解析最後壹個令牌後在行上接收剩余的文本。當然如果txt文本的格式如下,只有每行只有兩個字符竄的話就可以省去了。)
filename.txt的內容格式如下:
password username
password administrator
password administrator
password administrator
in ()裏添寫上需要解析的文本文件名。
do後面則添加需要執行的命令如net use 、net user等。
(是不是有點對administrator暴力跑ipc%,獲得密碼的味道啊?呵呵,就是字典做的有點累。)
2. for /l %i in(1,1,254) do net use \\x.x.x.%i\ipc$ “” /user:“”
/l這個參數是用來控制叠代的。
in()裏的集合是壹系列按步長量劃分的、從頭到尾的數字。這樣,(1,1,5) 將生成序列 1 2 3 4 5,而 (5,-1,1) 將生成序列 (5 4 3 2 1)。
do 後的用法同上。看看也能明白意思了吧。寫這篇文章也沒什麽特別意思,只是怕自己看到的好東西會忘掉。呵呵,不過總是有啟發的,不是嗎?
其實for用法有很多啊。比如用來添加權限相同的帳號。妳就可以先在記事本裏寫好了運行壹個for命令不就ok了。不用壹個壹個的添加,那樣的話還不要累死。當然do後面可以跟更多的參數,可以幹更多的類似暴力的事喔。嘿嘿..