Você pode experimentar este script, mas ele só funcionará se %%~tA
nas configurações regionais estiver retornando a data do arquivo usando o formato YMD. Caso contrário, a comparação não funcionará como esperado.
@Echo Off
setlocal enabledelayedexpansion
for /r %%A in (*.cfg;*.dat;*.hdr) do (
set p=%%~pA
set numeric=no
if "!p:~1,1!"=="0" set numeric=yes
if "!p:~1,1!"=="1" set numeric=yes
if "!p:~1,1!"=="2" set numeric=yes
if "!p:~1,1!"=="3" set numeric=yes
if "!p:~1,1!"=="4" set numeric=yes
if "!p:~1,1!"=="5" set numeric=yes
if "!p:~1,1!"=="6" set numeric=yes
if "!p:~1,1!"=="7" set numeric=yes
if "!p:~1,1!"=="8" set numeric=yes
if "!p:~1,1!"=="9" set numeric=yes
if !numeric!==yes (
if "%%~tA" LSS "2012-11-08" (
del %%A
)
)
)
endlocal
EDITAR
Acho que consegui modificar o script para funcionar do jeito que você deseja. Eu tive que me livrar do /r
switch e chamar uma sub-rotina de forma recursiva ou a lista negra não funcionaria corretamente. A lista negra deve ser armazenada no arquivo blacklist.txt
no mesmo diretório em que o script reside. O arquivo deve conter caminhos completos para pastas excluídas sem aspas:
D:\excluded folder1
D:\excluded folder2
D:\included folder\excluded folder3
Para cada pasta que não está na lista negra, é chamada uma sub-rotina que pesquisa por arquivos baseados na extensão e, em seguida, a data de cada arquivo é comparada com a data fornecida. Por favor, teste o script completamente. Eu tenho medo que ele possa quebrar em nomes de pastas contendo caracteres especiais como %
ou ^
.
@Echo Off
call :browse D:
goto :EOF
:browse
for /d %%A in ("%~1\*") do (
find /i "%%A" %~dp0blacklist.txt > nul
if errorlevel 1 (
call :delete "%%A"
call :browse "%%A"
) else (
echo SKIP %%A
)
)
goto :EOF
:delete
for %%A in ("%~1\*.cfg" "%~1\*.dat" "%~1\*.hdr") do (
if "%%~tA" LSS "2012-10-08" (
echo DEL %%A
del "%%A"
) else (
echo SAVE %%A
)
)
goto :EOF