批处理文件 FOR /f 令牌

Posted

技术标签:

【中文标题】批处理文件 FOR /f 令牌【英文标题】:Batch file FOR /f tokens 【发布时间】:2011-10-21 10:44:14 【问题描述】:

谁能逐行解释以下代码的工作原理。我真的迷路了。我一直在尝试学习如何使用 FOR 命令,但我不明白这一点。

@echo off

for /f "tokens=* delims= " %%f in (myfile) do (
  set line=%%f
  call :processToken
  )
  goto :eof

:processToken

  for /f "tokens=1* delims=/" %%a in ("%line%") do (
  echo Got one token: %%a
  set line=%%b
  )
  if not "%line%" == "" goto :processToken
  goto :eof

【问题讨论】:

【参考方案1】:
for /f "tokens=* delims= " %%f in (myfile) do

这会逐行读取文件,删除前导空格(谢谢,jeb)。

set line=%%f

然后将line 变量设置为刚刚读取的行并

call :procesToken

调用一个子程序来处理该行

:processToken

是上述子程序的开始。

for /f "tokens=1* delims=/" %%a in ("%line%") do

然后将在/ 处拆分行,但在第一个标记之后停止标记化。

echo Got one token: %%a

将输出第一个令牌和

set line=%%b

会将line 变量设置为该行的其余部分。

if not "%line%" == "" goto :processToken

如果line 还不是空的(即所有已处理的令牌),它会返回到开头,继续该行的其余部分。

【讨论】:

+1,但第一个 FOR /F "tokens=* delims= " 删除了行中的所有前导空格

以上是关于批处理文件 FOR /f 令牌的主要内容,如果未能解决你的问题,请参考以下文章

用于 /f 处理带空格的文件名

批处理中用for指令从文件读取字符串时如何对字符串进行判断

退出批处理文件中的 FOR 循环?

批处理文件 FOR 循环改进

如何使用批处理脚本对目录中的每个文件执行某些操作

如何打破批处理文件中的 FOR 循环?