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

Windows 如何在cmd for循环中迭代字符串?,windows,string,for-loop,batch-file,cmd,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 我做错了什么?尝试用FOR代替FOR/F。此外,设置var时不需要

我尝试在批处理脚本中迭代字符串:

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

我做错了什么?

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

set var=1 2 3

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

这是因为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字符替换为换行符

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看到五行被换行符分割,而不是只看到一行。

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

您应该为

set var=1 2 3

for %%i in (%var) do (
  echo %%i
)
如果要循环编号,请使用以下命令:

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

@Ed,我想迭代字符串,由空格分隔,所以我猜引号是necessary@Alvin你有没有试过我的例子?(虽然您是对的,/D是不必要的)@ks1322-在批处理脚本中不需要引号-空格是默认分隔符(因此您必须引用包含空格的文件系统路径),这是最接近我想要的。唯一的缺点是我事先不知道令牌的数量——这是用户输入。我想可以通过选择一些等于最大令牌列表大小的值来修复它,例如
“tokens=1-10”
@ks1322您也可以使用linefeed技术