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技术