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-Key: 243139

Url: https://administrator.de/contentid/243139

Printed on: April 23, 2024 at 20:04 o'clock

Member: Xaero1982
Solution Xaero1982 Jul 09, 2014 updated at 13:23:41 (UTC)
Goto Top
Hi,

versuch doch mal:

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

Gruß
Member: Sisyphusloughs
Sisyphusloughs Jul 09, 2014 at 12:39:53 (UTC)
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
Member: Xaero1982
Xaero1982 Jul 09, 2014 at 13:09:07 (UTC)
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ß
Member: Sisyphusloughs
Sisyphusloughs Jul 09, 2014 at 14:41:31 (UTC)
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