For loop 为什么在这种情况下for/D起作用?

For loop 为什么在这种情况下for/D起作用?,for-loop,cmd,For Loop,Cmd,为什么此代码工作时没有任何错误: for /D %%i in (".exe";".cmd") do ( echo %%i ) 但是在命令帮助中“for”指定了一组一个或多个文件。在NT中,for、dir、del等接受多个文件规范 del c:\folder\*.txt c:\folder\*.pdf 等 或 从onfor命令 for {%variable|%%variable} in (set) do command [ CommandLineOptions] (设置):必需。指定一个或多

为什么此代码工作时没有任何错误:

for /D %%i in (".exe";".cmd") do ( echo %%i )

但是在命令帮助中“for”指定了一组一个或多个文件。在NT中,for、dir、del等接受多个文件规范

del c:\folder\*.txt c:\folder\*.pdf

从on
for
命令

for {%variable|%%variable} in (set) do command [ CommandLineOptions]
(设置):必需。指定一个或多个文件、目录、值范围或文本字符串,以使用指定的 命令

命令:必需。指定要对包含的每个文件、目录、值范围或文本字符串执行的命令 在指定的(集合)中

for命令用每个文本字符串替换%variable或%%variable 直到命令处理所有文件为止

指定一组文件 set参数可以表示一组文件或多个文件 文件组。您可以使用通配符(即,*和?)来指定 文件集

使用for命令时,集合中的第一个值将替换 %变量或%%variable,然后指定的命令处理此 价值此操作将一直持续,直到所有文件(或文件组) 对与设定值相对应的数据进行处理

文档可能被认为是不明确的:虽然它表明的
将在文件/文件夹上迭代,但它没有说明文件/文件夹需要存在。仅当使用通配符时,处理的元素才是真实的现有文件/文件夹。但是如果没有通配符,就不会进行元素存在性的测试,集合中的元素被视为文本字符串

for
for/d
命令的行为方式相同(第一个用于文件,第二个用于目录):迭代
in
子句中提供的元素,如果其中任何元素包含通配符,则展开它并处理匹配的文件/文件夹列表,而不是指定的元素

就你而言

for /D %%i in (".exe";".cmd") do ( echo %%i )

包含两个要处理的元素(将
视为分隔符)。因此,for将迭代该集合中的元素
“.exe”
不包含通配符,因此它不需要扩展,并且对该元素执行
do
子句。一旦完成,对
“.cmd”

重复同样的过程,因为
command.com
是由一群吸毒的猴子编写的,而
cmd.exe
团队收到的唯一简短信息是最大限度地提高兼容性:-)@paxdiablo聪明,但
/D
在Windows 2000之前不是有效的选项。
for /D %%i in (".exe";".cmd") do ( echo %%i )