Primeiro, uma cautela. Uma lista de desbloqueio incompleta pode causar a exclusão de arquivos importantes. Além disso, essas "pastas de lixo" são geralmente necessárias para a operação correta do software que as criou. Se você ainda optar por esta solução, aqui está um one-liner, com quebras de linha para facilitar a leitura:
pushd C:\Users\John\Documents &&
for /D %i in (*) do @(
echo %i| findstr /V /I /R /C:"^Important$" /C:"^Keep me$" > NUL &&
echo rmdir /S /Q %i
) & popd
Na sua forma atual, esta declaração não faz nada prejudicial. O segundo echo é exibido, em vez de executar o comando 'rmdir' e é incluído como precaução. Verifique se o script funcionaria como pretendido e, em seguida, remova a segunda ocorrência de 'eco'.
Uma breve explicação. pushd
altera temporariamente o diretório para a pasta de documentos. for /D
lista todos os diretórios lá. Para cada diretório, findstr
corresponde seu nome à lista de permissões. Os comutadores /V /I /R
imprimem apenas entradas não correspondentes, tornam a procura insensível a maiúsculas e ative expressões regulares. Todos os diretórios que devem ser mantidos são listados como /C:"^dirname$"
. Os diretórios que não estiverem na lista de desbloqueio farão com findstr
return errorlevel zero, executando assim o comando após o duplo comercial, ou seja, rmdir /S /Q %i
, excluindo esse diretório, vazio ou não, sem solicitar confirmação.
Se for executado a partir de um arquivo de lote em vez de diretamente da linha de comando, substitua cada %i
por %%i
.