Rekursiv leere Verzeichnisse in Windows löschen

Ich habe ein Verzeichnis auf meinem Windows 7-Computer mit Hunderten, wenn nicht Tausenden von Unterverzeichnissen. Einige von ihnen haben Dateien, andere nicht. Ich möchte alle leeren Verzeichnisse löschen.

Wenn Sie sich den DOS-Befehl del und rmdir ansehen, sieht es nicht so aus, als könnten Sie dies rekursiv tun, ohne alle Dateien zu löschen. Gibt es eine Möglichkeit, dies über die Befehlszeile zu tun?

Author: Hennes, 2009-09-11

11 answers

Sie können Leere Verzeichnisse entfernen Dienstprogramm.

Alternativ können Sie diese einzeilige Batch-Datei verwenden (von DownloadSquad):

for /f "delims=" %d in ('dir /s /b /ad ^| sort /r') do rd "%d"

(wenn Sie in einer Batchdatei verwendet werden, ersetzen Sie %d durch %%d)

Dies funktioniert, weil rd kein Verzeichnis entfernt, das Dateien enthält.

 134
Author: caliban,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-10-13 19:28:00

Sie können auch ROBOCOPY verwenden. Es ist sehr einfach und kann auch verwendet werden, um leere Ordner in großen Hierarchien zu löschen.

ROBOCOPY folder1 folder1 /S /MOVE

Hier sind sowohl Quelle als auch Ziel folder1, da Sie nur leere Ordner löschen müssen, anstatt andere Dateien in einen anderen Ordner zu verschieben. Die Option /S besteht darin, das Kopieren(Verschieben, im obigen Fall) leerer Ordner zu überspringen. Es ist auch schneller, da die Dateien auf demselben Laufwerk verschoben werden.

 71
Author: Varun Sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-09-13 10:25:42

Da Cygwin mit GNU find geliefert wird, können Sie Folgendes tun:

find . -type d -empty -delete

Oder um das Rauschen zu vermeiden, wenn ein Ordner nicht mehr existiert:

find . -type d -empty -execdir rmdir {} +
 17
Author: Gaff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-06-16 01:34:49

Das kostenlose Dienstprogramm EmptyFolderNuker funktioniert einwandfrei aus einem Basisordner Ihrer Wahl. Es entfernt auch die Verzeichnisse, die nur leere Unterverzeichnisse enthalten.

 7
Author: Rob Kam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-08-12 19:48:12

Hmmm... vielleicht noch einfachere Lösung:

for /d /r %d in (*.*) do rd "%d"

Starten Sie dies aus dem Ordner, in dem leere Ordner gelöscht werden sollen.

/ d - funktioniert in Ordnern, nicht in Dateien /r-wird subdirs

 2
Author: Daniel Mošmondor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-09-02 23:41:02

Wenn SieCygwin installiert haben, können Sie Folgendes tun:

find -type d -exec rmdir {} \;
 0
Author: Anthony Giorgio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2009-09-11 21:50:13

Wenn Sie in Emacs arbeiten (diese plattformunabhängig machen), funktioniert Folgendes:

(defun *-delete-empty-directories (root-directory)
  "Recursively delete empty directories in ROOT-DIRECTORY.

When called from dired, `dired-current-directory' is used for
ROOT-DIRECTORY."

  ;; Interface
  (interactive (list (if (eq major-mode 'dired-mode)
                         (expand-file-name (dired-current-directory))
                       (read-from-minibuffer "Root directory: "))))
  (when (or (null root-directory) (string= "" root-directory))
    (user-error "No root directory provided"))
  (when (called-interactively-p 'interactive)
    (unless (yes-or-no-p (format "Delete all non-empty directories in `%s'? "
                                 root-directory))
      (user-error "Directory `%s' has been left untouched" root-directory)))

  ;; Implementation
  (require 'f)
  (let ((entries (f-directories root-directory)))
    (while entries
      (let ((curdir (car entries)))
        (when (f-directories curdir)
          (*-delete-empty-directories curdir))
        (unless (f-entries curdir)
          (delete-directory curdir)
          (message "Directory deleted: `%s'" curdir))
        (setq entries (cdr entries)))))
 0
Author: Sean Allred,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-05-06 15:19:25

Die Kombination von Gareth und G-Man ' s Beiträge:

find . -depth -type d -empty -execdir rmdir {} +

Bearbeiten: Aber das gab einen Sicherheitsfehler wegen 'C' in meinem PFAD var...so stattdessen:

$find . -depth -type d -empty | while read dir; do (rmdir -v $dir); done

Ich benutze xargs nicht, weil es ein Eingabezeilenlimit zu haben scheint (von ungefähr 1024 Zeilen, denke ich?), während

 while read x; do (command $x); done

Macht einfach weiter, solange es Eingaben hat. Lassen Sie das ausführliche Flag '-v' aus, wenn Sie die Ergebnisse nicht sehen und/oder schneller ausführen möchten.

 0
Author: skeetastax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-04-03 09:31:52

Keine der vorherigen Antworten funktionierte für mich, also habe ich die folgende Datei erstellt:

EmptyDirectoriesRemove.cmd

Inhalt: -

@setlocal enableextensions enabledelayedexpansion

:walk_tree
for /D %%d in (*) do (
cd %%d
@CALL :walk_tree %%d
cd ..
rd %%d
)

endlocal

Verwendung: Cd in das Verzeichnis der obersten Ebene, das Sie bereinigen möchten. Führen Sie an der Eingabeaufforderung der Befehlszeile Folgendes aus:

EmptyDirectoriesRemove.cmd -

Warnungen werden für nicht leere Verzeichnisse angezeigt.

Übliche Haftungsausschlüsse: Verwenden Sie auf Ihre Gefahr. Backup vor dem Testen. etc.

 0
Author: Jahmic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-12-13 04:09:18

Die 4NT Shell (heutzutage Take Command) hat eine /sx Option zu "DEL". /S ist rekursiv, das angehängte X ist leere Verzeichnisse entfernen.

 0
Author: Marco van de Voort,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-01-10 08:31:27

Sie können Powershell verwenden:

Get-ChildItem "Path" -recurse | 
  Where-Object {($_.PSIsContainer -eq $true) -and ((gci $_.fullName).count -eq 0)} | 
    Remove-Item -Force
 0
Author: Wasif Hasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-09-16 09:23:35