如何在cmd for循环中迭代字符串?

时间:2012-06-22 09:25:35

标签: windows string for-loop batch-file cmd

我试图在批处理脚本中迭代一个字符串:

set var="1 2 3"

for /F %%i in (%var%) do (  
  echo %%i
)

并获得此输出:

C:\>batch.bat


C:\>set var="1 2 3"

C:\>for /F %i in ("1 2 3") do (echo %i )

C:\>(echo 1 )
1

我希望打印所有3个数字:

1
2
3

我做错了什么?

3 个答案:

答案 0 :(得分:12)

这是因为FOR / F将每一行拆分为多个令牌,但您需要定义要处理的令牌数。

set var="1 2 3"

for /F "tokens=1-3" %%i in (%var%) do (  
  echo %%i
  echo %%j
  echo %%k
)

编辑:其他解决方案

就像Ed harper的回答:
您也可以使用普通的FOR循环,但是它还会尝试搜索磁盘上的文件,并且*?存在问题。

set var=1 2 3

for %%i in (%var%) do  (
    echo %%i
)

或者您使用换行技术和FOR / F循环,用换行符替换您的delim-character。

setlocal EnableDelayedExpansion
set LF=^


set "var=1 2 3 4 5"
set "var=%var: =!LF!%"
for /F %%i in ("!var!") do (  
  echo %%i
)

这适用于FOR / F看到由换行分割的五行而不是一行。

答案 1 :(得分:2)

尝试FOR代替FOR /F。此外,在设置var时引用该值是不必要的:

set var=1 2 3

for %%i in (%var%) do  (
echo %%i
)

答案 2 :(得分:1)

因为FOR /F循环文本文件的每一行,并且当与字符串(""引用)一起使用时,它只在该行上执行操作。 按空格分隔,但是要与选项tokens一起使用。

您应该使用FOR

set var=1 2 3

for %%i in (%var) do (
  echo %%i
)

如果要循环播放数字,请使用以下命令:

for /L %%i in (1,1,3) do (
  echo %%i
)