开发者

How do I get a for loop to work with a comma delimited string?

This is my code so far:

for /f "tokens=1 eol=," %%f IN ("1,2,3,4") do  (
    echo .
  开发者_开发问答  echo %%f    
)

I'm expecting that to produce:

.
1
.
2
.

etc...

But instead I get:

.
1

And that's it. What am I missing?


You've misunderstood the options.

  • tokens=1 means you only want the first token on each line. You want all of the tokens on the line.
  • eol=, means you want to interpret a comma as the beginning of an end of line comment. You want to use delims=, instead to indicate the comma is the delimiter (instead of the default value of whitespace).

FOR /F is primarily for operating on lines in a file. You're not doing that. You're operating on a single string, so Rubens' answer is closer to what you want:

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

However, in theory, you should be able to say something like:

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
)

This works as well, but probably doesn't scale in the way you want. Note that you have to escape the comma in the string using the ^ character, and you have to specify the tokens you want and then use the subsequent variables %g, %h and %i to get them.


Try this:

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


@OP, and while you are learning how to use DOS batch scripting, you might want to learn vbscript (or powershell) as well. These are alternatives and they make your batch scripting easier, especially when it comes to more complex tasks.

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

save the above as mysplit.vbs and on command line

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜