Alle Ordner löschen, außer bestimmte Ordner und Unterordner

Alle Ordner löschen, außer bestimmte Ordner und Unterordner

Ich habe eine SSD mit mehreren Partitionen. Ich muss unter J:\ arbeiten und alles darin löschen, außer den folgenden Ordnern:

J:\System Volume Information
J:\$RECYCLE.BIN
J:\New
J:\Old Stuff

Und die folgenden Unterordner:

J:\Papers\Folder
J:\Room\Main Documents
J:\Year\Origin\Part
J:\Year\Origin\Part Two

Nach langem Suchen und Lesen habe ich den folgenden Code geschrieben:

@ECHO OFF
SETLOCAL
SET "sourcedir=J:\"
SET "keepdir=System Volume Information"
SET "keepdir=$RECYCLE.BIN"
SET "keepdir=New"
SET "keepdir=Old Stuff"
SET "keepdir=Papers\Folder"
SET "keepdir=Room\Main Documents"
SET "keepdir=Year\Origin\Part"
SET "keepdir=Year\Origin\Part Two"
FOR /d %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepdir%" RD /S /Q "%%a"
GOTO :EOF

Leider funktioniert der obige Code nicht (er löscht alles in J:).

Antwort1

@echo off & cd /d J:\ || goto :eOf 

for /f ^delims^= %%i in =;('@dir /ogn /b /s /a:d
    ')do =;( type "%~f0" | 1>nul find /i "%%~fi" 
           );= || 1>nul 2>&1 rmdir /q /s "%%~fi"

goto :eof

:: Keep the list in the lines below the
:: full path of the folders that remained!

J:\New
J:\Old Stuff
J:\$RECYCLE.BIN
J:\Papers\Folder
J:\Year\Origin\Part
J:\Room\Main Documents
J:\Year\Origin\Part Two
J:\System Volume Information

1.Verwenden Sie einen Stapel mit einer Liste der Ordner, die Sie behalten möchten:

J:\New
J:\Old Stuff
J:\$RECYCLE.BIN
J:\Papers\Folder
J:\Year\Origin\Part
J:\Room\Main Documents
J:\Year\Origin\Part Two
J:\System Volume Information

2.Verwenden Sie eine Schleife, um Ihren Ordnerbaum aufzulisten

for /f ^delims^= %%i in =;('@dir /ogn /b /s /a:d
    ')do

3.Verwenden Sie für jeden Ordner in der Schleife einen Typ im Bat selbst und prüfen Sie, ob der Ordner/Pfad dort angezeigt wird:

type "%~f0" | 1>nul find /i "%%~fi"

4.Wenn der Ordner/Pfad ||in Ihrem Bath nicht gefunden wird ( ), löschen Sie ihn:

type ...  find .. || rmdir /q /s "%%~fi"

5.Beenden Sie die Schleife und beenden Sie die Datei:

goto :eOf

Weiterführende Literatur:

Antwort2

Anregung:

  1. J:\> dir /s /b /ad >DirsToRemove.bat
    Zur Liste hinzufügenalleDIRS auf J: (aktuelles Laufwerk) in die Datei DirsToRemove.bat.
  2. Bearbeiten Sie die Datei.
    Notepad funktioniert (nicht Wordpad), aber ein fortgeschrittenerer Texteditor ist vorzuziehen.
  3. Setzen Sie in jeder Zeile rmdir /s /q, die vor dem Verzeichnisnamen hinzugefügt wird,
    den Namen in "Anführungszeichen, wenn der Name LEERZEICHEN enthält.
    Die Verwendung von Anführungszeichen bei ALLEN Namen ist ebenfalls in Ordnung. =>rmdir /s /q "name"
    Ein fortgeschrittenerer Texteditor ermöglicht die Verwendung von Makros. Die Verwendung eines Makros kann so einfach sein wie das Starten einer Aufnahme, das Bearbeiten einer Zeile, das Stoppen der Aufnahme und anschließendes Starten des Makros mit einer Tastenkombination, so oft Sie möchten.
  4. Denken Sie daran, die Zeilen mit Verzeichnissen zu ENTFERNEN, die Sie BEHALTEN möchten.
  5. Speichern, dann...
  6. TunJ:\> .\DirsToRemove.bat

Wenn Sie ähnliche Dinge ein paar Mal gemacht haben, dauert es normalerweise nur ein oder zwei Minuten, um die anstehende Aufgabe zu erledigen.

verwandte Informationen