循环字符串由空格分隔

时间:2015-11-19 02:33:35

标签: batch-file

我有一个字符串"-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,但我仍然感到困惑的是tokensdelims究竟是什么。一些蝙蝠专家可以就此分享一些想法吗?

2 个答案:

答案 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