Loops 在批处理文件中使用forfiles.exe中的Set/A
这是最奇怪的事情。我不知道forfiles是异步的还是什么,但这段代码对我来说似乎简单明了,而且不起作用:Loops 在批处理文件中使用forfiles.exe中的Set/A,loops,batch-file,cmd,Loops,Batch File,Cmd,这是最奇怪的事情。我不知道forfiles是异步的还是什么,但这段代码对我来说似乎简单明了,而且不起作用: set a=0 forfiles /S /C "cmd /c if @isdir==FALSE set /a a+=1 & echo !a!" 我想是一个简单的计数器。但是,输出的是: 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 最后,a仍
set a=0
forfiles /S /C "cmd /c if @isdir==FALSE set /a a+=1 & echo !a!"
我想是一个简单的计数器。但是,输出的是:
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
最后,a
仍然设置为0
我已启用延迟扩展。为什么这不起作用?似乎,
for files
为每个文件调用一个新的cmd,并使用一个新的“fresh&empty”环境。来自10
的1
由set
命令生成,如本例所示:
forfiles /S /C "cmd /v:on /c if @isdir==FALSE set/a a+=1 >nul&echo !a!"
0
0
0
...
要使其工作,请使用更好的for
循环:
for /r %%i in (*) do set /a a+=1 &echo !a!
forfiles/s
会递归到子文件夹中,因此的等效循环需要/r
for/f%%i in('dir/b/s/a:-D')设置/a+=1&echo!a代码>将递归执行。这很好。我知道我可以用for/r
,但我不明白为什么另一种方法不起作用。虽然我可以通过重复地将1回音到文本文件中并数数行来实现。但主要是我不明白为什么它不起作用。回想起来,你的答案似乎很明显……但事后诸葛亮……诸如此类。无论如何,谢谢你明确的回答。