我有以下代码来获取每个文件的第一个标记,但它不起作用.请让我知道出了什么问题,以及我如何能够单独获取该行的每个其他标记.
我的标签分隔txt文件如下所示:
ABC 1000 GHY_GGG
ADD 2000
ABCSS 3000 JJY_GGG
Run Code Online (Sandbox Code Playgroud)
我的代码如下:
for /f "tokens=* usebackq delims= " %%a in ("%TraderWorkspaceFile%") do (
set line=%%a
call :processToken
)
goto :eof
:processToken
for /f "tokens=1 delims= " %%f in ("%line%") do (
echo Got one token: %%f
)
goto :eof
Run Code Online (Sandbox Code Playgroud)
谢谢!
FOR/F命令读取文件的行,并根据"tokens = delims ="选项将它们分隔在标记中.默认情况下,"标记"仅指行中的第一个标记,"delims"包含空格和制表符(如果未给出).这个FOR命令:
for /f "usebackq" %%a in ("%TraderWorkspaceFile%") do echo %%a
Run Code Online (Sandbox Code Playgroud)
会显示:
ABC
ADD
ABCSS
Run Code Online (Sandbox Code Playgroud)
而
for /f "tokens=2 usebackq" %%a in ("%TraderWorkspaceFile%") do echo %%a
Run Code Online (Sandbox Code Playgroud)
会显示:
1000
2000
3000
Run Code Online (Sandbox Code Playgroud)
请注意,"delims ="与默认值相同,因此没用,但"delims ="(没有delims)是一个技巧,它在第一个标记中包含整行.
for /f "usebackq delims=" %%a in ("%TraderWorkspaceFile%") do (
set line=%%a
call :processToken
)
goto :eof
:processToken
for /f "tokens=1 delims= " %%f in ("%line%") do (
echo Got one token: %%f
)
goto :eof
Run Code Online (Sandbox Code Playgroud)
会正确显示每一行的第一个标记,但是:
:processToken
for /f %%f in ("%line%") do (
echo Got one token: %%f
)
goto :eof
Run Code Online (Sandbox Code Playgroud)
会做同样的事情......
您可以通过子程序的参数以这种方式获得单独的空格或制表符分隔的标记:
:processLine
echo First token: %1, second token: %2, third one: %3
goto :eof
Run Code Online (Sandbox Code Playgroud)
必须以这种方式调用(而不是call:processToken):
call :processLine %line%
Run Code Online (Sandbox Code Playgroud)