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:
J:\> dir /s /b /ad >DirsToRemove.bat
Zur Liste hinzufügenalleDIRS auf J: (aktuelles Laufwerk) in die Datei DirsToRemove.bat.- Bearbeiten Sie die Datei.
Notepad funktioniert (nicht Wordpad), aber ein fortgeschrittenerer Texteditor ist vorzuziehen. - 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. - Denken Sie daran, die Zeilen mit Verzeichnissen zu ENTFERNEN, die Sie BEHALTEN möchten.
- Speichern, dann...
- Tun
J:\> .\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.