1

Я хочу иметь цикл в командном файле, и при каждом выполнении я хочу подсчитать количество файлов в папке. Проблема в том, что счетчик при первом выполнении всегда неизвестен и делает сценарий непригодным для использования.

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 ответ1

0

Проблема заключается в блоке оператора if - он оценивается в одном фрагменте. Решить с двумя изменениями:

  1. добавить setlocal delayedexpansion
  2. использовать!переменная! внутри блоков вместо% variable%, чтобы они оценивались "на лету".

Хорошее объяснение вы можете найти по адресу: этот ответ супер пользователя от Joey

Ваш код должен выглядеть так:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .