Zunächst eine Vorsicht. Eine unvollständige Whitelist kann zum Löschen wichtiger Dateien führen. Außerdem werden diese "Junk-Ordner" häufig für den korrekten Betrieb der Software benötigt, mit der sie erstellt wurden. Wenn Sie sich immer noch für diese Lösung entscheiden, ist hier ein Einzeiler mit Zeilenumbrüchen zur besseren Lesbarkeit:
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
In ihrer jetzigen Form ist diese Aussage nicht schädlich. Das zweite Echo wird angezeigt, anstatt den Befehl 'rmdir' auszuführen, und ist als Vorsichtsmaßnahme enthalten. Prüfen Sie, ob das Skript wie beabsichtigt funktioniert, und entfernen Sie dann das zweite Vorkommen von 'Echo'.
Eine kurze Erklärung. pushd
wechselt das Verzeichnis vorübergehend in den Dokumentenordner. for /D
listet alle Verzeichnisse dort auf. findstr
Stimmt für jedes Verzeichnis mit der Whitelist überein. Die Schalter /V /I /R
drucken nur nicht übereinstimmende Einträge, machen die Suche unabhängig von der Groß- und Kleinschreibung und aktivieren reguläre Ausdrücke. Jedes Verzeichnis, das aufbewahrt werden soll, wird dann als aufgeführt /C:"^dirname$"
. Verzeichnisse, die sich nicht auf der Whitelist befinden, machen den findstr
Rückgabefehlerlevel auf Null, wodurch der Befehl nach den doppelten kaufmännischen Und-Zeichen ausgeführt wird, dh rmdir /S /Q %i
das leere Verzeichnis wird gelöscht, ohne nach einer Bestätigung zu fragen.
Wenn Sie von einer Batchdatei anstatt direkt von der Befehlszeile aus ausgeführt werden, ersetzen Sie jede %i
durch %%i
.