批处理文件FOR/f令牌

23 windows for-loop batch-file token

任何人都可以逐行解释下面的代码是如何工作的.我真的迷路了.我一直在努力学习如何使用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
Run Code Online (Sandbox Code Playgroud)

Joe*_*oey 36

for /f "tokens=* delims= " %%f in (myfile) do
Run Code Online (Sandbox Code Playgroud)

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

set line=%%f
Run Code Online (Sandbox Code Playgroud)

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

call :procesToken
Run Code Online (Sandbox Code Playgroud)

调用一个与该行做某事的子程序

:processToken
Run Code Online (Sandbox Code Playgroud)

是上面提到的子程序的开始.

for /f "tokens=1* delims=/" %%a in ("%line%") do
Run Code Online (Sandbox Code Playgroud)

然后将该行拆分/,但在第一个令牌后停止标记化.

echo Got one token: %%a
Run Code Online (Sandbox Code Playgroud)

将输出第一个令牌和

set line=%%b
Run Code Online (Sandbox Code Playgroud)

line变量设置为该行的其余部分.

if not "%line%" == "" goto :processToken
Run Code Online (Sandbox Code Playgroud)

如果line尚未为空(即所有令牌都已处理),则返回到开始,继续该行的其余部分.

  • +1,但第一个`FOR/F"标记=*delims ="`从行中删除所有前导空格 (4认同)