Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 856
jcollum Avatar asked Jan 21 '10 20:01

jcollum


2 Answers

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.

like image 55
i_am_jorf Avatar answered Nov 03 '22 11:11

i_am_jorf


Try this:

set test=1,2,3,4
for /d %%f IN (%test%) do echo %%f
like image 42
Rubens Farias Avatar answered Nov 03 '22 12:11

Rubens Farias