如何让for循环使用逗号分隔的字符串?

时间:2010-01-21 20:38:10

标签: windows batch-file cmd

到目前为止,这是我的代码:

for /f "tokens=1 eol=," %%f IN ("1,2,3,4") do  (
    echo .
    echo %%f    
)

我期待这样做:

.
1
.
2
.
等等......

但我得到了:

.
1

就是这样。我错过了什么?

3 个答案:

答案 0 :(得分:11)

你误解了选项。

  • tokens=1表示您只需要每行上的第一个标记。你想要所有的令牌都在线上。
  • eol=,表示您要将逗号解释为行注释的开头。您希望使用delims=,来表示逗号是分隔符(而不是空格的默认值)。

FOR / F主要用于在文件中的行上操作。你不是那样做的。你正在使用单个字符串,因此鲁本斯的答案更接近你想要的答案:

@ECHO OFF
SET test=1,2,3,4
FOR /D %%F IN (%test%) DO (
  ECHO .
  ECHO %%F
)

然而,从理论上讲,你应该可以这样说:

FOR /F "usebackq delims=, tokens=1-4" %%f IN ('1^,2^,3^,4') DO (
  ECHO .
  ECHO %%f    
  ECHO .
  ECHO %%g
  ECHO .
  ECHO %%h
  ECHO .
  ECHO %%i
)

这也有效,但可能无法以您想要的方式扩展。请注意,您必须使用^字符转义字符串中的逗号,并且必须指定所需的标记,然后使用后续变量%g,%h和%i来获取它们。

答案 1 :(得分:1)

试试这个:

set test=1,2,3,4
for /d %%f IN (%test%) do echo %%f

答案 2 :(得分:0)

@OP,当您学习如何使用DOS批处理脚本时,您可能也想学习vbscript(或powershell)。这些是替代方案,它们使您的批处理脚本更容易,特别是在涉及更复杂的任务时。

Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strInput = objArgs(0)
s = Split(strInput,",")
For Each i In s
 WScript.Echo i
Next

将上述内容保存为mysplit.vbs并保存在命令行

C:\test>cscript //nologo mysplit.vbs 1,2,3,4
1
2
3
4