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

jco*_*lum 6 windows cmd batch-file

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

for /f "tokens=1 eol=," %%f IN ("1,2,3,4") do  (
    echo .
    echo %%f    
)
Run Code Online (Sandbox Code Playgroud)

我期待这样做:

.
1
.
2
.
Run Code Online (Sandbox Code Playgroud)

等等...

但相反,我得到:

.
1
Run Code Online (Sandbox Code Playgroud)

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

i_a*_*orf 11

你误解了这些选择.

  • tokens=1意味着你只需要每一行的第一个标记.你想要所有的令牌就行了.
  • eol=,表示您希望将逗号解释为行结束注释的开头.您希望使用delims=,而不是指示逗号是分隔符(而不是空格的默认值).

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

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

但是,从理论上讲,你应该可以这样说:

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
)
Run Code Online (Sandbox Code Playgroud)

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