Ich muss alle leeren Ordner über die Windows-Eingabeaufforderung aus meinem Anwendungsordner löschen.
Wie kann ich so eine Fledermausdatei erstellen?
Bitte hilf mir.
Ich muss alle leeren Ordner über die Windows-Eingabeaufforderung aus meinem Anwendungsordner löschen.
Wie kann ich so eine Fledermausdatei erstellen?
Bitte hilf mir.
Antworten:
for /f "usebackq" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"
von: http://blogs.msdn.com/b/oldnewthing/archive/2008/04/17/8399914.aspx
Natürlich würde ich es zuerst testen, ohne es zu löschen, bevor ich diesen Befehl ausführe. Hier ist auch eine modifizierte Version aus den Kommentaren, die Ordner mit Leerzeichen enthält:
for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"
PS: Es gibt weitere Kommentare im Blog-Beitrag, die Ihnen helfen könnten. Lesen Sie diese auch, bevor Sie dies ausprobieren
%%d
mit%d
Sie können den ROBOCOPY
Befehl verwenden. Es ist sehr einfach und kann auch zum Löschen leerer Ordner innerhalb einer großen Hierarchie verwendet werden.
ROBOCOPY folder1 folder1 /S /MOVE
Hier sind sowohl Quelle als auch Ziel folder1
, da Sie nur leere Ordner löschen müssen, anstatt andere (erforderliche) Dateien in einen anderen Ordner zu verschieben. /S
Option ist das Überspringen des Kopierens (Verschieben - im obigen Fall) leerer Ordner. Dies ist auch schneller, da die Dateien auf demselben Laufwerk verschoben werden.
Eine einfachere Möglichkeit besteht darin, mit xcopy eine Kopie der gesamten Verzeichnisstruktur mit dem Schalter / s zu erstellen. Hilfe für / s sagt Kopiert Verzeichnisse und Unterverzeichnisse mit Ausnahme von leeren.
xcopy dirA dirB /S
Dabei ist dirA die Quelle mit leeren Ordnern. DirB ist die Kopie ohne leere Ordner
xcopy dirA dirB /SI
hinzufügen, wird beispielsweise die Eingabeaufforderung "Gibt dirB einen Dateinamen oder Verzeichnisnamen auf dem Ziel an?" Übersprungen.
Sie brauchen usebackq nicht:
FOR /F delims^= %%A IN ('DIR/AD/B/S^|SORT/R') DO RD "%%A"
Zu der korrodierten Antwort auf derselben Seite, auf die verwiesen wird, gehört eine PowerShell-Version http://blogs.msdn.com/b/oldnewthing/archive/2008/04/17/8399914.aspx#8408736
Get-ChildItem -Recurse . | where { $_.PSISContainer -and @( $_ | Get-ChildItem ).Count -eq 0 } | Remove-Item
oder, genauer gesagt,
gci -R . | where { $_.PSISContainer -and @( $_ | gci ).Count -eq 0 } | ri
Gutschrift geht an den Buchungsautor
Dies ist ein Hybird der oben genannten. Es entfernt ALLE Dateien, die älter als X Tage sind, und alle leeren Ordner für den angegebenen Pfad. Zur Verwendung legen Sie einfach die Tage, den Ordnerpfad und das Laufwerk fest
@echo off
SETLOCAL
set days=30
set folderpath=E:\TEST\
set drive=E:
::Delete files
forfiles -p %folderpath% -s -d -%days% -c "cmd /c del /q @path "
::Delete folders
cd %folderpath%
%drive%
for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"`
"dir /ad/b/s | sort /R"
) do rd "%% d" entfernen
über die Befehlszeile: für / R / D% 1 in (*) rd "% 1"
in einer Batchdatei für / R / D %% 1 in (*) rd "%% 1"
Ich weiß nicht, ob es als solches dokumentiert ist, aber es funktioniert in W2K, XP und Win 7. Und ich weiß nicht, ob es immer funktioniert, aber es wird niemals versehentlich Dateien löschen.
Installieren Sie einen UNIX-Interpreter für Windows (Cygwin oder Git Bash) und führen Sie den Befehl cmd aus:
find / path / to / directory -empty -type d
To find them
find / path / to / directory -empty -type d -delete
To delete them
(Nicht wirklich mit der Windows-Cmd-Eingabeaufforderung, aber es ist einfach und dauerte einige Sekunden, um ausgeführt zu werden)
Es wird gut funktionieren. Dies ist der beste Weg, um alte Dateien zu löschen und leere Verzeichnisse rekursiv zu entfernen. Die folgende .bat-Datei lautet:
forfiles /p [PATH] /s /m [FILE-PATTERN] /d -[DAYS] /c "cmd /c del @path"
for /f "delims=" %%d in ('dir [PATH] /s /b /ad ^| sort /r') do rd "%%d"
Die Platzhalter müssen wie folgt ersetzt werden (ohne Anführungszeichen):
[DAYS] = Max. age of the files in days, e.g. “10”
[PATH] = Path to search for old files and empty folders, e.g. “C:\Backup\”
[FILE-PATTERN] = Pattern that matches files to delete, e.g. “*.bkp”
Das Skript wurde erfolgreich unter Windows 7 und Windows Server 2003 getestet.
@echo off
set /p "ipa= ENTER FOLDER NAME TO DELETE> "
set ipad="%ipa%"
IF not EXIST %ipad% GOTO notfound
IF EXIST %ipad% GOTO found
:found
echo DONOT CLOSE THIS WINDOW
md ccooppyy
xcopy %ipad%\*.* ccooppyy /s > NUL
rd %ipad% /s /q
ren ccooppyy %ipad%
cls
echo SUCCESS, PRESS ANY KEY TO EXIT
pause > NUL
exit
:notfound
echo I COULDN'T FIND THE FOLDER %ipad%
pause
exit
Wenn Sie die ROBOCOPY-Befehlszeile von Varun im Explorer-Kontextmenü verwenden möchten (dh mit der rechten Maustaste klicken), finden Sie hier einen Windows-Registrierungsimport. Ich habe versucht, dies als Kommentar zu seiner Antwort hinzuzufügen, aber das Inline-Markup war nicht möglich.
Ich habe dies auf meinem eigenen Windows 10-PC getestet, benutze es jedoch auf eigenes Risiko. Es wird eine neue Eingabeaufforderung geöffnet, der Befehl ausgeführt und angehalten, damit Sie die Ausgabe sehen können.
In eine neue Textdatei kopieren:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER \ Software \ Klassen \ Verzeichnis \ Hintergrund \ Shell \ Leere Ordner löschen \ Befehl] @ = "C: \ Windows \ System32 \ Cmd.exe / C \" C: \ Windows \ System32 \ Robocopy.exe \ "% V. "% V" / s / move "&& PAUSE"
[HKEY_CURRENT_USER \ Software \ Klassen \ Verzeichnis \ Shell \ Leere Ordner löschen \ Befehl] @ = "C: \ Windows \ System32 \ Cmd.exe / C \" C: \ Windows \ System32 \ Robocopy.exe \ "% V \" "% V" / s / move "&& PAUSE"
Benennen Sie die Erweiterung .txt in .reg um
Nun, nur ein schneller und schmutziger Vorschlag für eine einfache 1-Ebenen-Verzeichnisstruktur ohne Leerzeichen [Bearbeiten] und für Verzeichnisse, die nur EINEN Dateityp enthalten, den ich nützlich fand (irgendwann von http://www.pcreview.co.uk) /forums/can-check-if-folder-empty-bat-file-t1468868.html ):
for /f %a in ('dir /ad/b') do if not exist %a\*.xml echo %a Empty
/ ad: zeigt nur Verzeichniseinträge an
/ b: nacktes Format verwenden (nur Namen)
[Bearbeiten] Die Verwendung eines einfachen Sterns zum Überprüfen auf JEDE Datei (% a \ * oben) funktioniert nicht, danke für die Korrektur
Daher wäre das Löschen:
for /f %a in ('dir /ad/b') do if not exist %a\*.xml rmdir %a
for /f "tokens=*" %%d in ('dir /ad/b/s ^| sort /R') do rd "%%d"