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 das endlos tun. Den Weg zeigen 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 wie gewohnt löschen. Am Ende konnte ich es entfernen, indem ich die Befehlszeile verwendete und den übergeordneten Ordner mit löschte rd /s /q path
.
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 wirklich ein ärgerliches und verwirrendes Problem wäre.
Weiß jemand, wie das hätte passieren können und wie man dieses Problem reproduziert?
Aktualisieren
Für Interessenten: Dieser Pfad befand sich tief in einem TFS-Ordner. Wahrscheinlich verwendet TFS die erläuterte Bypass-Methode @grawity ( "Verschiedene Dateimanager, Archivierer usw." ).
Bin ich auf einen seltenen TFS-Fehler gestoßen?
quelle
..
es in einem Pfad verwendet werden kann, um anzuzeigen, dass ein Ordner aufwärts geht, würde ich vermuten, dass ein Programm oder ein Skript irgendwo entlang der Linie zwei Zeichenfolgen verkettet hat, um einen Pfad zu erstellen. Eine endete mit..
und die nächste begann mit..
und Da eine der unten genannten Techniken verwendet wurde, konnte der Pfad erfolgreich erstellt werden, obwohl das Ordnertrennzeichen dazwischen fehlte.GET /....\\....\\....\\....\\....\\....\\....\\....\\....\\winnt\\win.ini
. Offensichtlich gibt es irgendwo eine Sicherheitslücke, die diese auszunutzen versucht...
nicht....
. Es ist einfach eine Möglichkeit,\winnt
unabhängig von der Tiefe des Startpunkts (der Webwurzel) dorthin zu gelangen , sofern der Startpunkt weniger als 9 Ebenen tief ist. Es beruht auf der Tatsache, dass..
Sie beim Verlassen des Stammverzeichnisses im Stammverzeichnis verbleiben...
weshalb ich dieses ziemlich seltsam gefunden.Antworten:
Mit Win32 können Sie keine Dateien oder Ordner erstellen, deren Namen auf enden
.
- alle Punkte werden am Ende entfernt. Stattdessen wird versucht,test.
Marken zu erstellentest
. (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 befanden.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 nicht erstellen könnenC:\Example\....\
, können Sie ganz gut erstellen\\?\C:\Example\....\
.Ebenso können Sie solche Verzeichnisse mit
rmdir \\?\C:\path\...
aus Cmd löschen (habe ich noch nicht mit PowerShell getestet).Verschiedene Dateimanager, Archivierer usw. verwenden diese
\\?\
Methode möglicherweise , um längere Pfadnamen als üblich zu verwenden. Auf diese Weise werden sie auch nicht vom Kompatibilitätscode in Win32 beeinflusst. Sie umgehen das Entfernen von Punkten sowie die Übersetzung von magischen Dateinamen wieCON
oderNUL
.So könnte es sein, dass eines Ihrer Programme:
\\?\
um auf Dateien zuzugreifen,....
- aber es ist nicht wirklich möglich, sicher zu wissen, nach der Tatsache.quelle
echo "" > ....::$INDEX_ALLOCATION
. Dadurch wird ein Ordner mit dem Namen erstellt....
(der weiterhin auf den aktuellen Ordner verweist).\\?\"
in der .NET- Referenzquelle nach suchen , verursacht dies einen Laufzeitfehler auf ihrem Server.)com1
einen magischen Dateinamen gabZusä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 dann in diesem eine Verknüpfung (die Sie beispielsweise verwenden können
mklink /j
), und Sie erhalten eine sehr tiefe Struktur. Das letzte Mal, als ich dies unter Windows 2000 tat, gab es ein Ende der Rekursion (man konnte 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.quelle
mkdir ....
Es gibt eine einfachere Möglichkeit, das Verzeichnis zu erstellen. Geben Sie an der Eingabeaufforderung Folgendes ein:
MD ....\
und drücke Enter, es wird ein Verzeichnis mit vier Punkten erstellt. Dieses Verzeichnis kann auch mit dem Explorer angezeigt werden.
Es gibt einen Fehler in MS-DOS, der auf Version 1.0 zurückgeht. MS hat es schon länger gewusst, konnte oder wollte es aber 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 oft 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.
quelle
MD ....` only creates
.... \ .... `Baum - es gibt nur einen Rekursionsschritt.Ich hatte das gleiche problem In meinem Fall handelte es sich um einen Tippfehler im Befehl für .NET Core Publish:
Es wurde das Verzeichnis mit dem Namen '....' erstellt, das ich nicht entfernen oder umbenennen konnte. Dieses Verzeichnis verhält sich wie ein Verweis auf das übergeordnete Verzeichnis. Wenn ich in diesen Ordner gehe, befand ich mich immer noch im übergeordneten Ordner, aber der Pfad wurde von ".... \" angehängt.
Ich habe alle in diesem Thema erwähnten Befehle ausprobiert, aber keiner von ihnen hat funktioniert. Nach meinem Verständnis hat es sich so verhalten, weil ich andere Dateien und Verzeichnisse im übergeordneten Verzeichnis hatte und daher Parameter verwenden musste, mit denen der gesamte Inhalt rekursiv gelöscht werden kann.
Ich fand heraus, dass dieser Befehl:
kann das Verzeichnis '....' entfernen. Es wird nur der Verweis auf das übergeordnete Verzeichnis gelöscht, bei dem es sich eigentlich um das Verzeichnis '....' handelt, nicht mehr und nicht weniger. Trotz der Befehlsargumente:
Das übergeordnete Verzeichnis blieb unberührt.
quelle