我有一个字符串"-a valueA -b valueB -c valueC"
,我想使用bat用空格分割这个字符串并解析值“-a”“valueA”“ - b”“valueB”“ - c”和“valueC”一个接一个。
基本上,我想使用for循环来实现这一点,但是bat中的for循环似乎比我想象的复杂得多。
我尝试了以下代码,但显然它不起作用。
set TEST_CODE="-a valueA -b valueB -c valueC"
for /f "tokens=* delims= " %%a in (%TEST_CODE%) do (
echo %%a
)
我期待输出
-a
valueA
-b
valueB
-c
valueC
我指的是this link,但我仍然感到困惑的是tokens
和delims
究竟是什么。一些蝙蝠专家可以就此分享一些想法吗?
答案 0 :(得分:3)
这是一种方法。调用递归子例程。最后一行并不是真的需要,但我把它放在那里是为了安全(如果你要注释掉它上面的'if ... goto ...'行)。 作为解释,您调用子例程传递整个字符串。它剥离第一个标记,并用字符串的其余部分调用自身,直到字符串为空。
@echo off
call :GetToken "-a valueA -b valueB -c valueC"
pause
goto :eof
:GetToken
for /f "tokens=1*" %%a in ("%~1") do (
echo(%%a
if "%%b"=="" goto :eof
call :GetToken "%%b"
)
goto :eof
答案 1 :(得分:2)
两种选择。
set TEST_CODE=-a valueA -b valueB -c valueC
for /f "tokens=1-6 delims= " %%a in ("%TEST_CODE%") do (
echo %%a
Echo %%b
echo %%c
Echo %%d
Echo %%e
Echo %%f
)
或者
set TEST_CODE=-a valueA -b valueB -c valueC
for %%a in (%TEST_CODE%) do echo %%a
还有一个选项,因为你选择的答案是对函数的调用。
call :loop -a valueA -b valueB -c valueC
pause
goto :eof
:loop
IF NOT "%1"=="" (
echo %~1
SHIFT
GOTO loop
)
GOTO :EOF