为什么/ D适用于这种情况?

时间:2014-11-10 11:43:52

标签: for-loop cmd

为什么此代码可以正常运行:

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

但是在帮助命令" for"写入该命令接受"指定一组一个或多个文件"。

2 个答案:

答案 0 :(得分:0)

在NT中,for,dir,del等接受多个文件规范。

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

 dir "%userprofile%\desktop\*.*" "%userprofile%\documents\*.pdf"

答案 1 :(得分:0)

来自for for {%variable|%%variable} in (set) do command [ CommandLineOptions] 命令

for
  

(设置):必填。指定要使用指定进行处理的一个或多个文件,目录,值范围或文本字符串   命令

     

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

     

for命令用每个文本字符串替换%variable或%%变量   在指定的集合中,直到命令处理所有文件

     

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

     

使用for命令时,set中的第一个值将替换   %variable或%% variable,然后指定的命令处理它   值。这一直持续到所有文件(或文件组)为止   对应于处理的设定值

文档可能被认为是不明确的:虽然它表明for将遍历文件/文件夹,但它并未声明文件/文件夹需要存在。仅当使用通配符时,处理的元素才是真实的现有文件/文件夹。但是没有通配符,之前没有对元素存在进行测试,集合中的元素被认为是文本字符串。

for /din命令的行为方式相同(第一个用于文件,第二个用于目录):迭代for /D %%i in (".exe";".cmd") do ( echo %%i ) 子句中提供的元素,如果有的话包括通配符,展开它并处理匹配的文件/文件夹列表而不是指定的元素。

在你的情况下,

;

包含两个要处理的元素(".exe"被视为分隔符)。因此,for迭代遍历此集合中的元素。 do不包含通配符,因此,它不需要扩展,并且对此元素执行".cmd"子句。完成后,将对{{1}}

重复相同的过程