it-swarm.com.de

Auf meinem Windows-Computer hatte ich einen Ordner mit einem Namen von vier Punkten, der wie eine Art Kaninchenbau wirkte - wie ist das passiert?

Der Ordnername wurde im Datei-Explorer mit nur vier Punkten .... aufgelistet.

Als ich versuchte, es zu öffnen, stieß ich auf eine Art endlose Hasenlochschleife, in der ich genau denselben Ordner immer wieder öffnete - ich konnte dies endlos tun. Zeige den Pfad wie C:\ExamplePath\....\....\....\....\...., etc.

Meine TypeScript-Zusammenstellung hing in einem bestimmten Projekt. Es hat mehr als ein Jahr gedauert, bis ich diesen Ordner und die damit verbundenen Probleme gefunden habe, da er tief in verschachtelten Ordnern verwurzelt war. Ich habe nie mit einem solchen Problem gerechnet, also habe ich nie danach gesucht.

Ich konnte den Ordner aufgrund des speziellen Namens nicht auf normale Weise löschen. Am Ende konnte ich es mithilfe der Befehlszeile entfernen und den übergeordneten Ordner mit rd /s /q path löschen.

Danach habe ich versucht, den Ordner erneut zu erstellen, konnte dies jedoch nicht sowohl mit dem Datei-Explorer als auch mit der Befehlszeile tun.

In meinen über 20 Jahren mit Windows habe ich diesen Fehler noch nie gesehen, daher kann ich mir vorstellen, dass dies für Amateurbenutzer ein wirklich ärgerliches und verwirrendes Problem ist.

Weiß jemand, wie das hätte passieren können und wie man dieses Problem reproduziert?

Update

Für Interessenten: Dieser Pfad befand sich tief in einem TFS-Ordner. Also verwendet TFS wahrscheinlich die erläuterte Bypass-Methode @grawity ( "Verschiedene Dateimanager, Archivierer usw." )

Bin ich auf einen seltenen TFS-Fehler gestoßen?

196
Dirk Boer

In Win32 können Sie keine Dateien oder Ordner mit Namen erstellen, die auf . enden - alle Punkte werden am Ende entfernt. Beim Versuch, test. zu erstellen, wird stattdessen test angezeigt. (Dies dient der Kompatibilität mit 8.3-Namen in alter DOS/Win9x-Software.)

Wenn Sie versuchen, auf einen Ordner mit dem Namen .... zuzugreifen, wird der Name auf die leere Zeichenfolge reduziert, und Sie kehren zu dem Ordner zurück, in dem Sie sich zuvor befunden haben.

Der NT-Kernel erlaubt jedoch solche Namen. Es gibt verschiedene Mechanismen, die Dateinamenbeschränkungen umgehen, die von Win32-APIs auferlegt werden. Beispielsweise wird WSL (Windows Subsystem for Linux) nicht über Win32 ausgeführt und ist davon nicht betroffen. Es gibt auch die Bypass-Methode \\?\, eine absichtliche "Hintertür" für Programme, die wissen, was sie tun. Auch wenn Sie C:\Example\....\ nicht erstellen können, ist can create \\?\C:\Example\....\ in Ordnung.

Ebenso können Sie solche Verzeichnisse mit rmdir \\?\C:\path\... aus Cmd löschen (ich habe es noch nicht mit PowerShell getestet).

Verschiedene Dateimanager, Archivierer usw. verwenden möglicherweise die Methode \\?\, um längere Pfadnamen als üblich verwenden zu können. Auf diese Weise sind sie auch nicht vom Kompatibilitätscode in Win32 betroffen. Sie umgehen das Entfernen von Punkten sowie die Übersetzung von magischen Dateinamen wie CON oder NUL.

So könnte es sein, dass eines Ihrer Programme:

  1. verwendet immer \\?\ um auf Dateien zuzugreifen,
  2. es wurde aus Versehen versucht, einen Ordner mit dem Namen .... zu erstellen, aber im Nachhinein ist es nicht möglich, dies genau zu bestimmen.
303
grawity

Zusätzlich zu der Antwort von @ grawity kann ein Win32-Programm dies auch tun, indem es die "native" API direkt aufruft. Wenn ich mich nicht irre, wäre das im vorliegenden Fall NtCreateDirectoryObject. Diese Aufrufe sind heutzutage ziemlich gut dokumentiert, insbesondere das Gegenstück zum Kernel (das Sie nicht aus einem Win32-Programm aufrufen können), in diesem Fall ZwCreateDirectoryObject.

In Bezug auf die "unendliche Tiefe" ist die Verwendung von Links eine einfache Möglichkeit, dies zu erreichen. Erstellen Sie ein Verzeichnis und erstellen Sie anschließend eine Verknüpfung (Sie können beispielsweise mklink /j verwenden), um eine sehr tiefe Struktur zu erhalten. Als ich dies das letzte Mal unter Windows 2000 tat, gab es ein Ende der Rekursion (Sie konnten nicht "unendlich graben"). Unter neueren Betriebssystemen ist die Beschränkung möglicherweise größer oder aufgehoben. Sie können auch beispielsweise 10 Verzeichnisse erstellen, die jeweils ein untergeordnetes Verzeichnis des vorherigen sind, und im zehnten einen Link zum ersten erstellen.

22
user1532080

Es gibt eine einfachere Möglichkeit, das Verzeichnis zu erstellen. Geben Sie über den Befehl Eingabeaufforderung Folgendes ein:

MD ....\

und drücken Sie die Eingabetaste, um ein Verzeichnis mit vier Punkten zu erstellen. Dieses Verzeichnis kann auch mit dem Explorer angezeigt werden.

Es gibt einen Fehler in MS-DOS, der auf Version 1.0 zurückgeht. MS weiß es schon seit einiger Zeit, konnte oder wollte es jedoch nicht beheben. Sie haben das Problem mit PowerShell behoben.

Übrigens, wenn Sie versuchen:

RD ....

Es wird nicht gelöscht. Sie müssen diese spezielle Syntax verwenden, um sie zu entfernen.

RD ....\

Ich verwende dies auf bestimmten Servern, die ich verwalte. Ich erstelle häufig einen Benutzerordner im Stammverzeichnis der Festplatte und möchte nicht, dass ein anderer Administrator dazukommt und ihn entfernt.

Also gehe ich in meinen Ordner und erstelle einen Unterordner namens CON, AUX oder LPT, etc ...

Wenn ein anderer Administrator meinen Ordner entfernen möchte, muss er zunächst wissen, wie dieser Unterordner entfernt wird.

EDIT: Ich habe heute Morgen über diese Diskussion nachgedacht und mich dazu entschlossen, noch einen Schritt weiter zu gehen. Ich gehe davon aus, dass die Mods entscheiden, ob dies relevant ist.

Ich kann keine CD in den Ordner einlegen.

Überlegen Sie, ob ich MD c:\teste, dann CD C:\teste und MD .... \. Am Ende habe ich C:\teste ....

und alles ist gut.

Aber CD .... schlägt fehl und wirft mich zurück zu C:\test. (CD ....\macht dasselbe.)

Allerdings kann ich DIR .... und dir eine Auflistung holen. ich kann auch

MD C:\test ....\temp und es erstellt dieses Unterverzeichnis in ....

Ich kann auch CD C:\test ....\temp und in dieses Unterverzeichnis gehen.

Aber während ich in C:\test ....\temp bin, wenn ich CD .. ich bin wieder in C:\test.

Ich kann keine CDs in dieses Verzeichnis kopieren, aber ich kann den Ordner bearbeiten, indem ich Unterordner erstelle, und das ist interessant genug

ECHO "Testing" >> C:\test ....\test.txt

funktioniert auch und erstellt eine Datei in diesem Ordner. So kann ich einen Ordner mit vier Punkten erstellen, ihm Dateien und Ordner hinzufügen, dir Listen davon abrufen, aber ich kann keine CDs darin einlegen. Könnte es dafür eine Art böses Genie geben? Ich entschuldige mich bei den Mods, wenn ich zu weit vom Kurs abgekommen bin.

17
Larryc