sisyphusloughs
Goto Top

RMDIR meldet: Das Verzeichnis ist nicht leer

Hallo,

Per Batchdatei lösche ich regelmäßig einen lokalen Ordner auf meiner Festplatte mit folgendem Befehl:
rmdir /s /q %LOCALINST%_alt
Nicht immer, aber doch sehr oft erhalte ich die Ausgabe, dass ein Verzeichnis nicht leer ist und der Befehl daher abbricht. M.E. sollte die Option "/s" dafür sorgen, dass Unterverzeichnisse leer sind. Ich kann das nicht nachvollziehen, da ich weder mit dem Windows-Explorer oder anderen Programmen auf Ordner zugreife, die ich löschen will. Wenn ich mein Batch erneut starte, läuft der Befehl fast immer durch.

Ich habe den Verdacht, dass irgendein Prozess eine Datei-Sperre verursacht, eine Datei nicht gelöscht werden kann und der Befehl daher abbricht.

  • Hat jemand eine Idee, wie ich ermitteln kann. welcher Prozess beim Löschen auf besagte Ordner zugreift? Betrachten der Prozessanzeige im Task-Manager hat mich bislang nicht weitergebracht.
  • Kennt jemand irgendwelche "Verdächtige", die sich gerne beim Löschen oder ähnlichen Operation einmischen? Sind zum Beispiel der Echtzeitschutz der "Microsoft Security Essentials" ein Kandidat? Bislang kann ich das nicht "beweisen", da der Fehler auch manchmal nicht auftritt, wenn der Schutz eingeschaltet ist.
  • Andere Ideen?

Gruß und Danke,
Sisiphus

Content-ID: 243139

Url: https://administrator.de/forum/rmdir-meldet-das-verzeichnis-ist-nicht-leer-243139.html

Ausgedruckt am: 23.12.2024 um 05:12 Uhr

Xaero1982
Lösung Xaero1982 09.07.2014 aktualisiert um 15:23:41 Uhr
Goto Top
Hi,

versuch doch mal:

del /s /f /q %LOCALINST%_alt & rd /s /q %LOCALINST%_alt

Gruß
Sisyphusloughs
Sisyphusloughs 09.07.2014 um 14:39:53 Uhr
Goto Top
Hallo Xaero1982!

Danke für den Code. Ich habe das jetzt in mein Batch eingebaut und ausprobiert. Mich würde allerdings interessieren, warum rmdir/rd nicht riecht. Dabei ist etwas interessantes passiert. Beim ersten Test ist meine Überprüfung ins Stolpern gekommen:

if exist "%LOCALINST%_alt\." (  
	echo Fehler beim Loeschen der Vorgaengerversion.
	echo %ERROR_USE%
	goto :FAILED
	)

Diese hat das Verzeichnis noch gefunden! Es war aber verschwunden, zumindest konnte ich es mit dir oder dem Windows-Explorer nicht finden. Ich nehme auch an, dass rd/rmdir mir auch einen Fehler gemeldet hätte, wenn es beim Löschen nicht erfolgreich war. Daher habe ich den Verdacht, dass das Script wohl zu schnell für das Löschen ist, obwohl ich mir das gar nicht vorstellen kann! Ist das möglich?

Ich habe es noch mal mit
timeout /T 1  > nul
probiert, und es läuft ohne Meckern durch. Aber kann es sein, dass mein Batch den Befehl rmdir/rd "überholt"?

Gruß, Sisiphus
Xaero1982
Xaero1982 09.07.2014 um 15:09:07 Uhr
Goto Top
Hi,

und klappt es damit?

Überholen sollte eigentlich nicht möglich sein, aber ich kenne den Aufbau deiner Batch nicht.

Mit del /f erzwingst du das Löschen was bei rm/rmdir nicht geht. Daher kann es sein, dass er deswegen ins Straucheln gerät.

Gruß
Sisyphusloughs
Sisyphusloughs 09.07.2014 um 16:41:31 Uhr
Goto Top
Bislang funktionierts. Danke auch für die Erläuterung. Allerdings tritt der alte Fehler auch nicht immer auf. Deswegen schaue ich mir das eine Weile an.

Zum Überhol-Rätsel schicke ich mal den Abschnit. Gestartet wird mein Script mit der echo-Anweisung.

echo Archivierte Vorgaengerversion loeschen
:: rmdir /s /q %LOCALINST%_alt siehe ([content:243139])
del /s /f /q %LOCALINST%_alt & rd /s /q %LOCALINST%_alt
timeout /T 1  > nul
:: Ueberpruefen ob das Verzeichnis noch existiert.
if exist "%LOCALINST%_alt\." (  
	echo Fehler beim Loeschen der Vorgaengerversion.
	echo %ERROR_USE%
	goto :FAILED
	)

echo.
echo Apache Tomcat stoppen
sc stop %APACHSERVICE%
if not %errorlevel%==0 (
	if %errorlevel%==1062 (
		echo %APACHSERVICE% bereits gestoppt.
	) else (
		echo %APACHSERVICE% konnte nicht gestoppt werden.
		goto :FAILED
		)
	)

Für mich gibts da keinen Grund, warum die Prüfung (Zeile 6) schneller sein sollte, als das Löschen (Zeile 3). Ich würde das gerne verstehen...

Gruß, Sisiphus