这是我的代码到目前为止:
for /f "tokens=1 eol=," %%f IN ("1,2,3,4") do ( echo . echo %%f )
我期待这样做:
. 1 . 2 .
等等…
但是,我得到:
. 1
就是这样。 我错过了什么?
你误解了选项。
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来获取它们。
尝试这个:
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