Nazwa folderu została wymieniona w Eksploratorze plików za pomocą zwykłych czterech kropek ....
.
Kiedy próbowałem go otworzyć, natrafiłem na coś w rodzaju nieskończonej pętli z króliczym otworem, w której wielokrotnie otwierałem dokładnie ten sam folder - mogłem to robić w nieskończoność. Wskazanie ścieżki jak C:\ExamplePath\....\....\....\....\....
itp.
Zawieszała moją kompilację TypeScript w jednym konkretnym projekcie. Ponad rok zajęło mi znalezienie tego folderu i powiązanych z nim problemów, ponieważ był on głęboko zakorzeniony w zagnieżdżonych folderach. Nigdy nie spodziewałem się takiego problemu, więc nigdy go nie szukałem.
Nie mogłem usunąć folderu w zwykły sposób z powodu specjalnej nazwy. Na koniec mogłem go usunąć za pomocą wiersza polecenia i usunąć folder nadrzędny za pomocą rd /s /q path
.
Następnie próbowałem ponownie utworzyć folder, ale nie mogłem tego zrobić zarówno w Eksploratorze plików, jak i wierszu poleceń.
Przez ponad 20 lat korzystania z systemu Windows nigdy wcześniej nie widziałem tego błędu, więc mogę sobie wyobrazić, że byłby to irytujący i zagmatwany problem dla amatorskich użytkowników.
Czy ktoś wie, jak to się mogło stać i jak odtworzyć ten problem?
Aktualizacja
Dla osób zainteresowanych: ta ścieżka znajdowała się głęboko w folderze TFS. Prawdopodobnie więc TFS stosuje wyjaśnioną metodę @grawity ( „Różne menedżery plików, archiwizatory itp.” )
Czy natknąłem się na rzadki błąd TFS?
źródło
..
może być użyty w ścieżce do wskazania „idź w górę o jeden folder”, zaryzykowałbym przypuszczenie, że gdzieś po linii, jakiś program lub skrypt połączył dwa ciągi znaków, aby utworzyć ścieżkę, jeden kończył się..
, a następny zaczynał od..
, i ponieważ zastosował jedną z poniższych technik, udało mu się utworzyć ścieżkę, mimo że brakowało między nimi separatora folderów.GET /....\\....\\....\\....\\....\\....\\....\\....\\....\\winnt\\win.ini
. Najwyraźniej istnieje / była pewna podatność gdzieś, którą ta próba wykorzystuje...
nie....
. Jest to po prostu sposób przejścia do\winnt
dowolnej głębokości punktu początkowego (katalogu głównego), o ile głębokość punktu początkowego jest mniejsza niż 9 poziomów. Polega on na tym, że przejście..
z katalogu głównego pozostawia cię w katalogu głównym...
dlatego uznałem to za dość dziwne.Odpowiedzi:
Win32 nie pozwala tworzyć plików ani folderów z nazwami kończącymi się na
.
- wszystkie kropki są usuwane od końca. Próbując stworzyćtest.
markitest
pojawiają się zamiast. (Ma to na celu zapewnienie zgodności z 8.3 nazwami w starym oprogramowaniu z czasów DOS / Win9x.)W rezultacie, za każdym razem, gdy próbujesz uzyskać dostęp do folderu o nazwie
....
, jego nazwa zostaje zredukowana do pustego ciągu i wracasz do folderu, w którym byłeś wcześniej.Jądro NT pozwala jednak na takie nazwy. Istnieją różne mechanizmy, które omijają ograniczenia nazw plików narzucone przez interfejsy API Win32 - na przykład WSL (Windows Subsystem for Linux) nie działa na systemie Win32 i nie ma na niego wpływu. Istnieje również
\\?\
metoda obejścia, celowe „backdoor” pozostawione programom, które wiedzą, co robią. Nawet jeśli nie można utworzyćC:\Example\....\
, to może stworzyć\\?\C:\Example\....\
dobrze.Podobnie możesz usunąć takie katalogi z
rmdir \\?\C:\path\...
Cmd (nie testowałem jeszcze z PowerShell).Różne menedżery plików, archiwizatory itp. Mogą korzystać z tej
\\?\
metody, aby móc używać dłuższych nazw ścieżek niż zwykle - a dzięki temu nie ma na nie wpływu kod zgodności w Win32; omijają usuwanie kropek, a także tłumaczenie magicznych nazw plików, takich jakCON
lubNUL
.Może to być jeden z twoich programów:
\\?\
dostępu do plików,....
- ale po tym fakcie nie można na pewno wiedzieć.źródło
echo "" > ....::$INDEX_ALLOCATION
. Spowoduje to utworzenie folderu o nazwie....
(nadal wskazującego bieżący folder).\\?\"
w źródle referencyjnym .NET powoduje błąd czasu wykonywania na ich serwerze).com1
magiczna nazwa plikuOprócz odpowiedzi @ grawity program Win32 może to zrobić, wywołując bezpośrednio „natywny” interfejs API. Jeśli się nie mylę, w niniejszej sprawie byłby to NtCreateDirectoryObject. Wywołania te są obecnie dość dobrze udokumentowane, zwłaszcza ich odpowiednik jądra (którego nie można wywołać z programu Win32), w tym przypadku ZwCreateDirectoryObject.
Jeśli chodzi o „nieskończoną głębokość”, łatwym sposobem na osiągnięcie tego jest użycie linków. Utwórz katalog, a następnie wewnątrz niego, stwórz z nim połączenie (możesz
mklink /j
na przykład użyć ), a skończysz z bardzo głęboką strukturą. Ostatnim razem, gdy to robiłem, było w systemie Windows 2000, zakończyła się jednak rekurencja (nie można było „kopać w nieskończoność”). Możliwe, że w nowszym systemie operacyjnym limit jest większy lub usunięty, możesz także utworzyć, powiedzmy, 10 katalogów, z których każdy jest dzieckiem poprzedniego, aw 10., utworzyć link z powrotem do pierwszego.źródło
mkdir ....
Istnieje łatwiejszy sposób na utworzenie katalogu. W wierszu polecenia wpisz:
MD ....\
i naciśnij Enter, utworzy katalog z czterema kropkami. Ten katalog można również wyświetlić w Eksploratorze.
W systemie MS-DOS występuje usterka, która sięga wstecz do wersji 1.0. MS wiedział o tym od jakiegoś czasu, ale nie mógł lub nie mógł tego naprawić. Rozwiązali problem z PowerShell.
BTW, jeśli spróbujesz:
RD ....
Nie uda się go usunąć. Musisz użyć tej konkretnej składni, aby ją usunąć.
RD ....\
Używam tego na niektórych serwerach, którymi administruję. Często tworzę folder użytkownika w katalogu głównym dysku i nie chcę, aby inny administrator pojawił się i go usunął.
Więc wejdę do mojego folderu i utworzę podfolder o nazwie CON, AUX lub LPT itp.
Jeśli inny administrator chce usunąć mój folder, musi najpierw wiedzieć, jak usunąć ten podfolder.
EDYCJA: Myślałem o dzisiejszej dyskusji i postanowiłem pójść o krok dalej. Zakładam, że mody zdecydują, czy to jest istotne.
Nie mogę włożyć płyty CD do folderu.
Rozważmy, że jeśli wykonam MD c: \ test, to CD C: \ test i MD .... \ Skończę na C: \ test ....
i wszystko jest dobrze.
Ale CD .... zawodzi i kopie mnie z powrotem do C: \ test. (CD .... \ robi to samo.)
Jednak mogę DIR .... i uzyskać listę reż. mogę też
MD C: \ test .... \ temp i tworzy ten podkatalog w ....
Mogę także CD C: \ test .... \ temp i przejść do tego podkatalogu.
Ale będąc w C: \ test .... \ temp, jeśli mam CD .. Jestem z powrotem w C: \ test.
Nie mogę cd do tego katalogu, ale mogę manipulować folderem, tworząc podfoldery i wystarczająco interesujące coś takiego
ECHO „Testowanie” >> C: \ test .... \ test.txt
działa również i tworzy plik w tym folderze. Mogę więc utworzyć folder z czterema kropkami, mogę dodawać do niego pliki i foldery, mogę uzyskać listę jego katalogów, ale nie mogę na nim CD. Czy może być do tego jakiś zły geniusz? Przepraszam modów, jeśli zboczyłem zbyt daleko z kursu.
źródło
MD ....` only creates
.... \ .... `drzewo - jest tylko jeden krok rekurencji.Miałem ten sam problem. W moim przypadku była to literówka w poleceniu publikowania .NET Core:
Utworzył katalog o nazwie „....”, którego nie mogłem usunąć ani zmienić nazwy. Ten katalog działał jak odniesienie do katalogu nadrzędnego. Jeśli wejdę do tego folderu, nadal znajduję się w folderze nadrzędnym, ale do ścieżki dodano „.... \”.
Próbowałem wszystkich poleceń wymienionych w tym temacie, ale żadne z nich nie działało. W moim rozumieniu tak to działało, ponieważ miałem inne pliki i katalogi w katalogu nadrzędnym, więc musiałem użyć parametrów, które mogą rekurencyjnie usuwać całą zawartość.
Dowiedziałem się, że to polecenie:
można usunąć katalog „....”. Usuwa tylko odniesienie do katalogu nadrzędnego, którym w rzeczywistości jest ten katalog „....”, nic więcej, nic mniej. Pomimo argumentów polecenia:
katalog nadrzędny pozostał nietknięty.
źródło