我們先來看一個示例:
::查看進程使用的端口:
@echo off&color a&Title XP端口-進程查詢-寒夜孤星【初學者】 setlocal enabledelayedexpansion&echo.&echo. for /L %%k in (1 1 60) do set /p gu=*<nul echo.&echo * 本程序僅用于XP端口-進程查詢(查看進程使用的端口) * echo * 寒夜孤星【初學者】 * for /L %%k in (1 1 60) do set /p gu=*<nul echo.&echo.&echo.&echo 端口號 進程名稱 ECHO TCP協(xié)議: for /F "usebackq skip=4 tokens=2,5" %%i in (`"netstat -ano -p TCP"`) do ( call :Assoc %%i TCP %%j echo !TCP_Port! !TCP_Proc_Name! ) ECHO UDP協(xié)議: for /F "usebackq skip=4 tokens=2,4" %%i in (`"netstat -ano -p UDP"`) do ( call :Assoc %%i UDP %%j echo !UDP_Port! !UDP_Proc_Name! ) echo 請按任意鍵退出本程序,。 pause>nul :Assoc for /F "tokens=2 delims=:" %%e in ("%1") do ( set %2_Port=%%e ) for /F "skip=2 usebackq delims=, tokens=1" %%a in (`"Tasklist /FI "PID eq %3" /FO CSV"`) do ( set %2_Proc_Name=%%~a ) goto :eof |
運行的效果:
“ECHO TCP協(xié)議:”及其前面的內(nèi)容,因為前面已經(jīng)講過了,,這里就不再重復講解了,。
現(xiàn)在,,我們來看一下for 的另一個語法結(jié)構(gòu) for /f 的使用:
使用文件解析過程處理命令輸出,、字符串和文件內(nèi)容,。使用迭代變量定義要檢查的內(nèi)容或字符串,以及使用各種 ParsingKeywords 選項進一步修改解析方式,。使用 ParsingKeywords 令牌選項指定哪些令牌應該傳遞為迭代程序變量,。注意:在沒有使用令牌選項時,/F 將僅檢查第一個令牌,。
文件解析過程包括讀取輸出、字符串或文件內(nèi)容,、分成獨立的文本行及然后將每行解析成零個或更多個令牌,。然后通過設置為令牌的迭代程序變量值,調(diào)用 for 循環(huán),。默認情況下,,/F 傳遞每個文件每一行的第一個空白分隔符號。跳過空行,。語法的不同點為:
for /F ["ParsingKeywords"] {%% | %}variable in (filenameset) do command [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ("LiteralString") do command [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ('command') do command [CommandLineOptions]
filenameset 參數(shù)指定一個或多個文件名稱,。在繼續(xù)到 filenameset 中的下一個文件之前,每個文件都會被打開,、讀取和處理,。要覆蓋默認解析行為,指定 "ParsingKeywords",。這是一個引用字符串,,它包含一個或多個關鍵字以指定不同的解析選項。
如果使用 usebackq 選項,,請使用如下語法之一:
for /F ["usebackqParsingKeywords"] {%% | %}variable in ("filenameset") do command [CommandLineOptions]
for /F ["usebackqParsingKeywords"] {%% | %}variable in ('LiteralString') do command [CommandLineOptions]
for /F ["usebackqParsingKeywords"] {%% | %}variable in (`command`) do command [CommandLineOptions]
下表列出可以用于 ParsingKeywords 的解析關鍵字,。
關鍵字 |
說明 |
eol=c |
指定行尾字符(只一個字符)。 |
skip=n |
指定在文件的開頭跳過的行數(shù),。 |
delims=xxx |
指定定界符集合,。這將替換空格和制表符的默認分隔符集。 |
tokens=x,y,m-n |
指定將哪些令牌從每行傳遞到每個迭代的 for 正文,。結(jié)果就分配了附加變量名稱,。m-n 格式是一個范圍,指定從 mth 到 nth 的令牌。如果 tokens=字符串中最后一個字符是星號 (*),,則將分配附加的變量,,并在解析的最后一個令牌后在行上接收剩余的文本。 |
usebackq |
指定可以使用引號引用 filenameset 中的文件名稱,,將后面帶有引號的字符串作為一個命令執(zhí)行,,而帶有單引號的字符串是文字字符串命令。 |
|
看了是不是很眼暈???我也很暈。,。,。。因為我不太有信心把他解釋清楚,。
怎樣吧,,我們來看一個簡單的示例:
::For /F的使用示例1:
@echo off&color a&Title For /F的使用示例
echo ;注釋行,這是臨時文件,用完刪除 >test.txt echo 寒 夜 孤 星 【 初 學 者 】 >>test.txt echo 寒,夜,孤,星,【,初,學,者,】 >>test.txt echo 寒-夜-孤-星-【-初-學-者-】 >>test.txt FOR /F "eol=; tokens=1,3* delims=,- " %%i in (test.txt) do echo %%i %%j %%k Pause Del test.txt |
運行的效果:
在這里:
eol=; 指定分號開頭的行為注釋行; tokens=1,3* 將每行第1段,第3段和剩余字段分別賦予變量%%i,,%%j,,%%k; delims=,- (減號后有一空格)以“逗號”“減號”和“空格”為分隔符,,空格必須放在最后,。
看一下下面的示例2,很簡單的,,不再解釋了:
::For /F的使用示例2: @echo off&color a&Title For /F的使用示例2 echo ;注釋行,這是臨時文件,用完刪除 >test.txt echo 寒 夜 孤 星 【 初 學 者 】 >>test.txt echo 寒,夜,孤,星,【,初,學,者,】 >>test.txt echo 寒-夜-孤-星-【-初-學-者-】 >>test.txt FOR /F "eol= delims=" %%i in (test.txt) do echo %%i Pause Del test.txt |
運行的效果:
再看另外一個示例3:
::For /F的使用示例3: @echo off&color a&Title For /F的使用示例3 FOR /F "delims=" %%i in ('net user') do @echo %%i pause |
運行的效果:
在這里:這樣你本機全部賬號名字就出來了把擴號內(nèi)的內(nèi)容用兩個單引號引起來就表示那個當命令執(zhí)行,FOR會返回命令的每行結(jié)果,加那個"delims=" 是為了讓我空格的行能整行顯示出來,不加就只顯示空格左邊一列!
|