在使用 Windows 10 的提升命令中,我运行以下批处理文件:
@echo off
cls
for /f "tokens=1-6 delims=," %%G in ("3D Objects,Documents,Downloads,Music,Pictures,Videos") do (
echo %%G
)
我期望它列出这六个项目中的每一个。相反,它只列出了第一个(3D 对象),然后停止。使用“Tokens”似乎没有太大区别,“delims”似乎没有像我想象的那样发挥作用。
问题:我是否错误地认为FOR
可以处理列表中的逗号分隔的项目?
答案1
对于非文件列表,我认为它并不像您预期的那样工作,因为如内所示for /?
。。。
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters] FOR /F ["options"] %variable IN ("string") DO command [command-parameters] FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
我相信这意味着FOR /F
句柄要么是command
、string
要么file-set
是,我推测它们file-set
具体指的是实际文件。如果是这样的话,那么这意味着将非文件列表放在那里,它被解释为字符串,而 和delims
无法tokens
解析或迭代。
要解决此问题,请将非文件列表放在常规为了循环而不使用任何tokens
或delims
,并确保包含空格的值用双引号括起来。
@echo off
cls
for %%G in ("3D Objects",Documents,Downloads,Music,Pictures,Videos) do (
echo %%~G
)
您可以将所有值括在双引号中,并使用~
变量占位符中的 [ ] 波浪号从输出值中解析出双引号,从而提供不带双引号的所需输出。
@echo off
cls
for %%G in ("3D Objects","Documents","Downloads","Music","Pictures","Videos") do (
echo %%~G
)
输出
3D Objects
Documents
Downloads
Music
Pictures
Videos