Если просто попробовать изменять переменную в теле FOR и выводить её на экран, то получим обескураживающий результат: переменная не меняет свое значение внутри цикла, хотя по выходу из него принимает корректное значение, т.е. при выполнении кода:
SET cnt=1получим результат наподобие:
FOR /F "tokens=*" %%f IN ('dir "%1" /b') DO ( echo %cnt%
SET /a cnt+=1 )
echo Total: %cnt%
1
1
1
....
1
Total: 285
Для того, чтобы в теле цикла виделось актуальное значение переменной, необходимо использовать SETLOCAL EnableDelayedExpansion, а значение переменной получать, обрамляя её имя не в "%", а в "!":
SETLOCAL EnableDelayedExpansionТеперь вывод будет корректен:
FOR /F "tokens=*" %%f IN ('dir "%1" /b') DO ( echo !cnt!
SET /a cnt+=1 )
echo !cnt!
1
2
...
284
Total: 285
Спасибо! Очень помогло
ОтветитьУдалить