Переменные объявления:
SET /A days=180
SET /A count=0
SET cmdStr=CMD /C DEL @FILE
SET xmlDir=D:\Client Communications\XML
У меня уже есть цикл for, который использует FORFILES для удаления файлов данных xml и psr, и это выглядит так:
FOR %%G IN (.xml, .psr) DO (
FORFILES /P "%xmlDir%" /M *%%G /D -%days% /C "%cmdStr%" >nul 2>nul
IF ERRORLEVEL 1 (
ECHO No %%G files %days% days old or older were found.
) ELSE (
ECHO %%G files as old as %days% days or older have been deleted.
)
)
Теперь я хочу изменить этот пакетный файл, чтобы он также подсчитывал количество файлов (для каждого типа файлов), которые были удалены командой FORFILES, чего, я считаю, можно добиться, поместив команду FORFILES в цикл FOR / F. Я не хотел делать вложенный цикл, но в итоге я создал подпрограмму. Мой код теперь выглядит так:
FOR %%G IN (.xml, .psr) DO (
CALL :process_files %%G count
IF !count!==0 (
ECHO No %%G files %days% days old or older were found.
) ELSE (
ECHO !count! %%G files as old as %days% days or older have been deleted.
)
SET !count!=0
)
PAUSE
ENDLOCAL
:process_files
FOR /F "delims=" %%G IN ('
FORFILES /P "%xmlDir%" /M *%1 /D -%days% /C "%cmdStr%"
') DO SET /A %~2+=1
EXIT /B
Не похоже, что счет увеличивается должным образом. Когда я пытаюсь эхо! Считать! выводит:
!count! .xml files as old as 180 days or older have been deleted.
Когда я пытаюсь измениться! % count% я получаю этот вывод:
No .psr files 180 days old or older were found.
Если я подсчитаю счет внутри: process_files непосредственно перед его завершением, он выводит "count", так что похоже, что он обрабатывается как строка, а не как целое число. Не уверен, почему это так.