O contador de arquivos não está funcionando corretamente no arquivo em lote

1

Eu quero ter um loop em um arquivo em lotes e em cada execução eu quero contar o número de arquivos em uma pasta. O problema é que o contador na primeira execução é sempre desconhecido e torna o script inutilizável.

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

O conceito é aguardar alguns loops até que o programa seja finalizado. Quando a pasta Resultados está vazia, o usuário tem um erro. A questão é que, na primeira execução, a variável file_counter não é sempre declarada. Alguém poderia me ajudar?

    
por xmaze 21.07.2016 / 14:14

1 resposta

0

O problema é o bloco de instruções if - ele é avaliado em um bloco. Resolva com duas alterações:

  1. adicionar delayedexpansion setlocal
  2. use! variable! blocos internos em vez de% variable% para que eles avaliem "on the fly".

Você pode ver uma boa explicação em: this super usuário answer Joey

Seu código deve se parecer com:

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
    
por 21.07.2016 / 15:47