到目前为止,这是我的代码:
for /f "tokens=1 eol=," %%f IN ("1,2,3,4") do (
echo .
echo %%f
)
我期待这样做:
.
1
.
2
.
等等......
但我得到了:
.
1
就是这样。我错过了什么?
答案 0 :(得分:11)
你误解了选项。
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 :(得分:1)
试试这个:
set test=1,2,3,4
for /d %%f IN (%test%) do echo %%f
答案 2 :(得分:0)
@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