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 .