我们先来看一个示例:
::查看进程使用的端口:
@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协议: 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协议: 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协议:”及其前面的内容,因为前面已经讲过了,这里就不再重复讲解了。
现在,我们来看一下for 的另一个语法结构 for /f 的使用:
使用文件解析过程处理命令输出、字符串和文件内容。使用迭代变量定义要检查的内容或字符串,以及使用各种 ParsingKeywords 选项进一步修改解析方式。使用 ParsingKeywords 令牌选项指定哪些令牌应该传递为迭代程序变量。注意:在没有使用令牌选项时,/F 将仅检查第一个令牌。
文件解析过程包括读取输出、字符串或文件内容、分成独立的文本行及然后将每行解析成零个或更多个令牌。然后通过设置为令牌的迭代程序变量值,调用 for 循环。默认情况下,/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 参数指定一个或多个文件名称。在继续到 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 |
指定在文件的开头跳过的行数。 |
delims=xxx |
指定定界符集合。这将替换空格和制表符的默认分隔符集。 |
tokens=x,y,m-n |
指定将哪些令牌从每行传递到每个迭代的 for 正文。结果就分配了附加变量名称。m-n 格式是一个范围,指定从 mth 到 nth 的令牌。如果 tokens=字符串中最后一个字符是星号 (*),则将分配附加的变量,并在解析的最后一个令牌后在行上接收剩余的文本。 |
usebackq |
指定可以使用引号引用 filenameset 中的文件名称,将后面带有引号的字符串作为一个命令执行,而带有单引号的字符串是文字字符串命令。 |
|
看了是不是很眼晕啊?我也很晕
。。。。因为我不太有信心把他解释清楚。
怎样吧,我们来看一个简单的示例:
::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 |
运行的效果:
在这里:这样你本机全部账号名字就出来了把扩号内的内容用两个单引号引起来就表示那个当命令执行,FOR会返回命令的每行结果,加那个"delims=" 是为了让我空格的行能整行显示出来,不加就只显示空格左边一列!
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。