打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
批处理学习9
我们先来看一个示例:

 

::查看进程使用的端口:

@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=" 是为了让我空格的行能整行显示出来,不加就只显示空格左边一列!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
BAT|自动建立当前目录下及子目录下的文件清单超链接网页
批处理教程:FOR入门与进阶秘籍
批处理详细教程(二)
for /f 用法详解
for/F开关详解
dos下和批处理中的for语句的基本用法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服