Известны ошибки в проверке даты ForFiles в определенных версиях Windows.
Чтобы обойти это, вы можете использовать Robocopy, чтобы сгенерировать список подходящих файлов, а затем удалить их с помощью цикла For:
MD "%temp%\Empty"
FOR /F "Tokens=*" %%A IN ('
ROBOCOPY "D:\Olderfiles\SourceDocuments" "%temp%\Empty" *
/MinAGE:120
/L /NP /NC /NS /FP /NDL /NJH /NJS
^| FINDStr /I /R /C:"\\Archive\\.*\.xlsx$"
') DO @(
DEL /F/Q "%%~A"
)
В зависимости от количества файлов и подкаталогов это или ForFiles может занять некоторое время, так как вам нужны только папки «Архив».
Итак, чтобы ускорить это, давайте проверим только каталоги с именем «ARCHIVE», используя DIR, чтобы соответствовать только этим, и затем мы зациклим этот список для запуска robocopy:
Это будет намного быстрее, чем Forfiles или вышеуказанный цикл:
MD "%temp%\Empty"
FOR /F "Tokens=*" %%a IN ('
DIR /AD/S/B "D:\Olderfiles\SourceDocuments\*Archive"
') DO (
FOR /F "Tokens=*" %%A IN ('
ROBOCOPY "%%~A" "%temp%\Empty" *
/MinAGE:120
/L /NP /NC /NS /FP /NDL /NJH /NJS
^| FINDStr /I /R /C:"\\Archive\\.*\.xlsx$"
') DO (
DEL /F/Q "%%~A"
)
)
Если вы просто вставляете это в строку CMD, вам нужно использовать это, чтобы просто удалить знак% из каждой переменной цикла:
MD "%temp%\Empty"
FOR /F "Tokens=*" %a IN ('
DIR /AD/S/B "D:\Olderfiles\SourceDocuments\*Archive"
') DO (
FOR /F "Tokens=*" %A IN ('
ROBOCOPY "%~A" "%temp%\Empty" *
/MinAGE:120
/L /NP /NC /NS /FP /NDL /NJH /NJS
^| FINDStr /I /R /C:"\\Archive\\.*\.xlsx$"
') DO (
DEL /F/Q "%~A"
)
)