Попытка написать командный файл, который удаляет старые файлы данных xml и psr, используя FORFILES, а также подсчитывает, сколько файлов удаляется таким образом - PullRequest
0 голосов
/ 28 мая 2019

Переменные объявления:

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", так что похоже, что он обрабатывается как строка, а не как целое число. Не уверен, почему это так.

...