Solução
Apesar de seu nome, o comando forfiles
é capaz de lidar com as pastas e dos arquivos. Aqui está um script em lote que faz o trabalho:
@echo off
setlocal
set target=X:\backups
set days=-2
for /f "usebackq delims=" %%G in (
'forfiles /p "%target%" /c "cmd /c if /i @isdir == true echo @path" /d %days% 2^>nul'
) do echo rd /s /q "%%~G"
pause
endlocal & exit /b
Como funciona
Primeiro, as variáveis target
e days
são inicializadas. O primeiro é definido para a pasta que você deseja digitalizar e o último é a quantidade de dias. Valores negativos significam mais antigos ou iguais .
O comando forfiles
é executado especificando a pasta e o número de dias que foram definidos anteriormente. Para cada resultado, a variável especial @isdir
é verificada: se o valor for true
, a entrada atual será uma pasta e seu @path
será ecoado. A saída do comando é então analisada para obter todas as pastas correspondentes e excluí-las. Por motivos de segurança, há um comando echo
extra para que você possa verificar se as pastas corretas foram removidas.
Ao usar a opção recursiva ( /s
), todos os arquivos, pastas e suas subpastas são processados. Neste caso você não quer; caso contrário, você pode acabar excluindo subpastas antigas contidas em pastas mais novas, que não devem ser tocadas.