![Bizarres leeres Verzeichnis, das nur mit rmdir /s gelöscht werden kann](https://rvso.com/image/1628800/Bizarres%20leeres%20Verzeichnis%2C%20das%20nur%20mit%20rmdir%20%2Fs%20gel%C3%B6scht%20werden%20kann.png)
Irgendwie bin ich bei einem leeren Verzeichnis gelandet (das ich vor einigen Monaten mit NodeJS als Teil eines von mir ausgeführten Skripts erstellt habe), das nicht mit einem normalen gelöscht werden kann rmdir
. Ich kann das Verzeichnis so oft kopieren und einfügen, wie ich möchte, und selbst die Kopien bleiben mit diesem nicht löschbar rmdir
:
C:\testing>dir
Volume in drive C is Local Disk
Volume Serial Number is 8830-C25A
Directory of C:\testing
20/07/2020 04:47 PM <DIR> .
20/07/2020 04:47 PM <DIR> ..
20/07/2020 01:25 PM <DIR> test
0 File(s) 0 bytes
3 Dir(s) 43,126,059,008 bytes free
C:\testing>rmdir test
Access is denied.
Dies geschieht in einer Administrator-Eingabeaufforderung, und ich habe sogar alle Berechtigungen für das Verzeichnis wie folgt festgelegt Full control
:
Allem Anschein nach ist das Verzeichnis vollkommen leer. Ich habe im Explorer die Anzeige von versteckten Dateien und Systemdateien aktiviert, sehe jedoch weder Unterverzeichnisse noch Dateien und dir /a
auch hier wird nichts angezeigt:
C:\testing\test>dir /a
Volume in drive C is Local Disk
Volume Serial Number is 8830-C25A
Directory of C:\testing\test
20/07/2020 01:25 PM <DIR> .
20/07/2020 01:25 PM <DIR> ..
0 File(s) 0 bytes
2 Dir(s) 43,123,294,208 bytes free
Das Ausführen attrib
im Verzeichnis zeigt nichts:
C:\testing\test>attrib
File not found - C:\testing\test\*.*
Das andere Merkwürdige ist, dass es mir sagt, Access is denied
wenn ich es versuche, rmdir
anstatt The directory is not empty
.
Ich habe auch in Betracht gezogen, dass ein Programm einen offenen Handle für das Verzeichnis haben könnte (so unwahrscheinlich das auch ist, nachdem ich es aus dem Original kopiert und eingefügt habe). Nun, nachdem ich alles überprüft hatte, was mir einfiel (LockHunter, Handle-Suche im Process Explorer, Handle-Suche im Resource Monitor und das Handle-Programm von Sysinternals), konnte ich nirgends offene Handles finden.
An diesem Punkt scheint also etwas im Gange zu sein, oder? Was istWirklichDas Seltsame ist, dass wenn ich das mache rmdir /s test
(rekursives Löschen), alles problemlos gelöscht wird:
C:\testing>rmdir /s test
test, Are you sure (Y/N)? y
C:\testing>dir
Volume in drive C is Local Disk
Volume Serial Number is 8830-C25A
Directory of C:\testing
20/07/2020 04:58 PM <DIR> .
20/07/2020 04:58 PM <DIR> ..
0 File(s) 0 bytes
2 Dir(s) 43,120,893,952 bytes free
Das bedeutet, dass da tatsächlich etwas drin ist test
. Was könnte es sein? Ich bin wirklich neugierig, denn nichts von dem, was ich bisher gemacht habe, hat mir etwas Nützliches gezeigt. Ich kann einfach nicht herausfinden, was rmdir test
den Fehler in diesem bestimmten Verzeichnis (oder in Kopien davon) verursacht.
Meine offizielle Frage lautet also: Was ist der Grund für dieses bizarre Verhalten?
Antwort1
Dank der hervorragenden Arbeit von @LPChip in den Kommentaren glaube ich, dass ich jetzt meine Antwort habe.
Die Ausführung attrib
auf dem Ordner selbst ( attrib test
) ergab, dass der Ordner über ein schreibgeschütztes Attribut verfügte:
C:\testing>attrib test
R C:\testing\test
Durch Entfernen des Schreibschutzattributs kann der Ordner gelöscht werden:
C:\testing>attrib -r test
C:\testing>rmdir test
C:\testing>dir
Volume in drive C is Local Disk
Volume Serial Number is 8830-C25A
Directory of C:\testing
23/07/2020 09:03 AM <DIR> .
23/07/2020 09:03 AM <DIR> ..
0 File(s) 0 bytes
2 Dir(s) 43,965,960,192 bytes free
Wenn Sie einen neuen Ordner erstellen und das schreibgeschützte Attribut hinzufügen, wird das Problem exakt reproduziert:
C:\testing>md test2
C:\testing>attrib +r test2
C:\testing>rmdir test2
Access is denied.
Das hat rmdir
das Entfernen des Ordners verhindert, aber zwei Fragen bleiben: 1) Warum funktioniert rmdir /s
es, wenn rmdir
es nicht funktioniert, und 2) warum hat das Ändern des Kontrollkästchens „Schreibgeschützt“ im Eigenschaftendialogfeld keine erkennbare Auswirkung?
Ich habe noch ein bisschen nachgeforscht undgelerntdass der Eigenschaftendialog eines Ordners in Windows es Ihnen nicht erlaubt, das schreibgeschützte Attribut des Ordners selbst festzulegen, sondern nur dessen Inhalt. Ich bin bisher davon ausgegangen, dass der Text„Gilt nur für Dateien im Ordner“meinte, dass die Einstellung des Zustands „gemischt“ nur für den Inhalt gelten würde, „Ein“ jedoch für alles (darüber habe ich nicht nachgedacht), aber eigentlich bedeutet es, dass, wenn Sie es auf den Zustand „Ein“ oder „Aus“ einstellen, der gewählte Zustand nur auf den Inhalt angewendet wird und der Zustand „gemischt“ lediglich bedeutet „alles so lassen, wie es ist“.
Das erklärt das verwirrende Verhalten, das ich im Eigenschaftendialog gesehen habe, aber es erklärt nicht, warum rmdir
es sagt, Access is denied
aber rmdir /s
funktioniert. Nun... ich weiß nicht. Es könnte eine Sache der Abwärtskompatibilität sein, eine Sache der Unix-Kompatibilität, ein Fehler, eine absichtliche Designentscheidung (using /s
hat schließlich eine „Sind Sie sicher?“-Eingabeaufforderung). Ich kann keinen Hinweis auf dieses Verhalten finden. Wenn jemand weitere Informationen hat, lassen Sie es mich wissen und ich werde sie der Antwort hinzufügen.