批处理文件不循环列表中的非文件项目

批处理文件不循环列表中的非文件项目

在使用 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句柄要么是commandstring要么file-set是,我推测它们file-set具体指的是实际文件。如果是这样的话,那么这意味着将非文件列表放在那里,它被解释为字符串,而 和delims无法tokens解析或迭代。


要解决此问题,请将非文件列表放在常规为了循环而不使用任何tokensdelims,并确保包含空格的值用双引号括起来。

@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

支持资源

相关内容