批处理文件中的文件计数器无法正常工作

批处理文件中的文件计数器无法正常工作

我想在批处理文件中创建一个循环,每次执行时都计算文件夹中文件的数量。问题是第一次执行时的计数器总是未知的,导致脚本无法使用。

loop:
@set /a counter=%counter%+1 
@if %counter% GTR 2 (
@set file_counter=0
for %%x in ("%Stckalz_Input%\%Directory_Stckalz_Job%\Results\*") do (set /a file_counter+=1)
@echo Server is busy or not responding. %file_counter%
)
goto loop

概念是等待一些循环直到程序结束。当结果文件夹为空时,用户会遇到错误。问题是第一次执行时变量file_counter总是未声明。有人能帮助我吗?

答案1

问题在于 if 语句块 - 它在一个块中被评估。通过两个更改解决:

  1. 添加 setlocal delayedexpansion
  2. 在块内使用 !variable! 而不是 %variable% 来“动态”评估它们。

您可以在此处看到很好的解释:这个超级用户的回答经过乔伊

您的代码看起来应如下所示:

setlocal enabledelayedexpansion

:loop
@set /a counter=%counter%+1 
@if %counter% GTR 2 (
   @set /a file_counter=0
   for %%x in ("%Stckalz_Input%\%Directory_Stckalz_Job%\Results\*") do (set /a file_counter+=1)
   @echo Server is busy or not responding. !file_counter!
)
goto :loop

相关内容