Как получить цикл for для работы со строкой, разделенной запятой? - PullRequest
6 голосов
/ 21 января 2010

Это мой код:

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

Я ожидаю, что для производства:

.
1
.
2
.

и т.д ...

Но вместо этого я получаю:

.
1

И это все. Что мне не хватает?

Ответы [ 3 ]

11 голосов
/ 22 января 2010

Вы неправильно поняли параметры.

  • 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 голос
/ 21 января 2010

Попробуйте это:

set test=1,2,3,4
for /d %%f IN (%test%) do echo %%f
0 голосов
/ 22 января 2010

@ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...