Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在批处理文件中使用forfiles.exe中的Set/A_Loops_Batch File_Cmd - Fatal编程技术网

Loops 在批处理文件中使用forfiles.exe中的Set/A

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仍

这是最奇怪的事情。我不知道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
仍然设置为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回音到文本文件中并数数行来实现。但主要是我不明白为什么它不起作用。回想起来,你的答案似乎很明显……但事后诸葛亮……诸如此类。无论如何,谢谢你明确的回答。