我如何获得一个for循环使用逗号分隔的string?

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

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

我期待这样做:

 . 1 . 2 . 

等等…

但是,我得到:

 . 1 

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

你误解了选项。

  • 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来获取它们。

尝试这个:

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

@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