Это - мой код до сих пор:
for /f "tokens=1 eol=," %%f IN ("1,2,3,4") do (
echo .
echo %%f
)
Я ожидаю что произвести:
.
1
.
2
.
и т.д...
Но вместо этого я добираюсь:
.
1
И вот именно. Что я пропускаю?
Вы неправильно поняли варианты.
Токены = 1
означает, что вы хотите только первый токен на каждой строке. Вы хотите все жетоны на линии. EOL =,
означает, что вы хотите интерпретировать запятую как начало конца комментариев линии . Вы хотите использовать DELIMS =,
вместо этого, чтобы указать, что запятая - это разделитель (вместо значения по умолчанию Whitespace). Для / F в основном для работы на строках в файле. Вы этого не делаете. Вы работаете в одной строке, поэтому ответ Rubens ближе к тому, что вы хотите:
@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