Verzeichnis loeschen, aber nur wenn es leer ist

Antworten
Benutzeravatar
embl-structures
Beiträge: 327
Registriert: 13 Jan 2010, 18:41
Wohnort: Heidelberg
Kontaktdaten:

Verzeichnis loeschen, aber nur wenn es leer ist

Beitrag von embl-structures »

Hallo zusammen,

gibt es eine einfache Moeglichkeit, Verzeichnisse zu loeschen aber nur wenn Sie leer sind? Ich haette angenommen "delete" oder "del" ohne "-s" und "-f" loeschten nur leere Verzichnisse, aber meine Tests zeigen etwas anderes.

frank
Benutzeravatar
Thomas_H
Beiträge: 525
Registriert: 09 Jun 2010, 11:57
Wohnort: Havelland

Re: Verzeichnis loeschen, aber nur wenn es leer ist

Beitrag von Thomas_H »

Moinsens...

das lässt sich nur über eine Batchdatei realisieren. Ich hab mal ein wenig gegoogelt ;) und bin zu folgender Quick-And-Dirty-Lösung gekommen:

Code: Alles auswählen

@echo off
dir /a-d | find /c "." > NUMfiles.###
set /p count=<NUMfiles.###

IF %count% == 0 GOTO Ende
echo Da sind %count% Dateien drin.
Goto Ende

:NixDrin
echo Keine Dateien zu finden

:Ende
Das entsprechend anpassen, zB. den Ordner, der zu löschen ist angeben, die Kommandos nachtragen, die ausgeführt werden sollen, FALLS noch Dateien drin sind (also hier statt "echo Da sind %count% Dateien drin.")
und dann ins Script einbauen durch Aufruf der Batch-Datei...

Gruß

Thomas_H
Kennst Du schon die WIKI für OPSI-Scripte? Fertige Installationsscripte bekommen und ablegen unter OPSI-Wiki
Aus dem Glashaus :) : UIB bietet auch Schulungen und Supportverträge für Opsi an.
Bild
Benutzeravatar
embl-structures
Beiträge: 327
Registriert: 13 Jan 2010, 18:41
Wohnort: Heidelberg
Kontaktdaten:

Re: Verzeichnis loeschen, aber nur wenn es leer ist

Beitrag von embl-structures »

Thomas_H hat geschrieben:

Code: Alles auswählen

@echo off
dir /a-d | find /c "." > NUMfiles.###
set /p count=<NUMfiles.###

IF %count% == 0 GOTO Ende
echo Da sind %count% Dateien drin.
Goto Ende

:NixDrin
echo Keine Dateien zu finden

:Ende
Vielen Dank. Und schon habe ich wieder etwas Batch-Programmierung gelernt :-). Ich bin unterdessen auch etwas weitergekommen: Del/Delete (ohne -s) loeschen einen Ordner genau dann nicht, wenn er weitere Ordner enthaelt. Enthaelt der Ordner aber Dokumente, wird darauf nicht Ruecksicht genommen. Allerdings macht der DOS-Befehl 'rmdir' genau was ich will: Er loescht ein Verzeichnis, aber nur wenn es leer ist. Ich kann deshalb mein Problem mit folgender Funktion loesen:

Code: Alles auswählen

[DosInAnIcon_RemoveDir]
rmdir /Q $MeinVerzeichnis
LG
frank
Benutzeravatar
Thomas_H
Beiträge: 525
Registriert: 09 Jun 2010, 11:57
Wohnort: Havelland

Re: Verzeichnis loeschen, aber nur wenn es leer ist

Beitrag von Thomas_H »

Moinsens...
embl-structures hat geschrieben:Allerdings macht der DOS-Befehl 'rmdir' genau was ich will: Er loescht ein Verzeichnis, aber nur wenn es leer ist. Ich kann deshalb mein Problem mit folgender Funktion loesen:

Code: Alles auswählen

[DosInAnIcon_RemoveDir]
rmdir /Q $MeinVerzeichnis
Öhm... nö. /Q unterdrückt die Nachfrage, wenn Du mit dem Schalter /S alle Verzeichnisse und Dateien im angegebenen Verzeichnis löschen willst.

Zitat 'help rmdir':
Entfernt (löscht) ein Verzeichnis.

RMDIR [/S] [/Q] [Laufwerk:]Pfad
RD [/S] [/Q] [Laufwerk:]Pfad

/S Löscht alle Verzeichnisse und Dateien im angegebenen Verzeichnis
zusätzlich zu dem Verzeichnis selbst. Wird verwendet, um ganze
Verzeichnisbäume zu löschen.

/Q Keine Nachfrage, ob die Verzeichnisbäume mit /S entfernt werden
sollen.
Wenn's so einfach wär, hätte es auch irgendwer geschrieben... :) Ob Du nun 'rmdir /Q %MeinVerzeichnis%' oder einfach nur 'rmdir %MeinVerzeichnis%' schreibst, bleibt dabei egal. Die Antwort ist beim nicht lleren Verzeichnis gleich:
Das Verzeichnis ist nicht leer
Deine Ausgangsfrage aber ist ja, wie Du Verzeichnisse löschen kannst, eben nur wenn sie leer sind. Und sauberer ist, zuvor eine Prüfung durchzuführen und damit Fehler zu vermeiden, die den Anwender uU. verwirren...

Gruß

Thomas_H
Kennst Du schon die WIKI für OPSI-Scripte? Fertige Installationsscripte bekommen und ablegen unter OPSI-Wiki
Aus dem Glashaus :) : UIB bietet auch Schulungen und Supportverträge für Opsi an.
Bild
Benutzeravatar
embl-structures
Beiträge: 327
Registriert: 13 Jan 2010, 18:41
Wohnort: Heidelberg
Kontaktdaten:

Re: Verzeichnis loeschen, aber nur wenn es leer ist

Beitrag von embl-structures »

Thomas_H hat geschrieben:
embl-structures hat geschrieben:Allerdings macht der DOS-Befehl 'rmdir' genau was ich will: Er loescht ein Verzeichnis, aber nur wenn es leer ist. Ich kann deshalb mein Problem mit folgender Funktion loesen:

Code: Alles auswählen

[DosInAnIcon_RemoveDir]
rmdir /Q $MeinVerzeichnis
Öhm... nö. /Q unterdrückt die Nachfrage, wenn Du mit dem Schalter /S alle Verzeichnisse und Dateien im angegebenen Verzeichnis löschen willst.
Ja, ich koennte mir tatsaechlich das /Q sparen, aber 'rmdir' tut trotzdem exakt das Gewuenschte.
Thomas_H hat geschrieben:Wenn's so einfach wär, hätte es auch irgendwer geschrieben... :)
Davon kann man in Foren und Maillisten nicht unbedingt ausgehen ;)
Thomas_H hat geschrieben:Ob Du nun 'rmdir /Q %MeinVerzeichnis%' oder einfach nur 'rmdir %MeinVerzeichnis%' schreibst, bleibt dabei egal. Die Antwort ist beim nicht lleren Verzeichnis gleich:
Das Verzeichnis ist nicht leer
Deine Ausgangsfrage aber ist ja, wie Du Verzeichnisse löschen kannst, eben nur wenn sie leer sind. Und sauberer ist, zuvor eine Prüfung durchzuführen und damit Fehler zu vermeiden, die den Anwender uU. verwirren...
Eben, und genau tut rmdir in einem einzigen Kommando: Testen ob das Verzeichnis leer ist und falls nicht - und kein /S gegeben ist -, dann wird es geloescht. Das Ganze findet in einer DosInAnIcon-Sektion statt (siehe mein Beispiel), es gibt also auch keinerlei verwirrende Meldungen an die Benutzer/innen.

Dein Skript ist zwar gut und ich werde es in meiner Codeschnipsel-Sammlung behalten (man weiss ja nie ;-) ), aber in einem OPSI-Deinstallationsskript habe ich es dann doch lieber mit weniger Zeilen, ganz gemaess dem KISS (Keep It Simple and Stupid) Konzept.

LG
frank
Antworten