Windows makinemde bir çeşit tavşan deliği gibi davranan dört nokta adında bir klasör vardı - bu nasıl oldu?


198

Klasör adı Dosya Gezgini'nde yalnızca düz dört nokta ile listelenmiştir .....

Açmaya çalıştığımda, aynı klasörü tekrar tekrar açtığım bir çeşit sonsuz tavşan deliği döngüsüne girdim - bunu sonsuza dek yapabilirdim. Gibi yol gösteriliyor C:\ExamplePath\....\....\....\....\.....

TypeScript derlememi belirli bir projede asılı tutuyordu. Bu klasörü ve onunla ilgili sorunları bulmadan önce bir yıldan fazla zamanımı aldı, çünkü iç içe geçmiş klasörlerin derinliklerine kök salmıştı. Asla böyle bir sorun beklemiyordum, bu yüzden hiç aramadım.

Özel ad nedeniyle klasörü normal şekilde silemedim. Sonunda komut satırını kullanarak ve ana klasörü ile silerek kaldırabilirim rd /s /q path.

Daha sonra, klasörü tekrar oluşturmaya çalıştım, ancak hem Dosya Gezgini hem de komut satırında bunu yapamadım.

Windows’u kullanmaya başladığım 20 yıldan beri bu hatayı daha önce hiç görmedim, bu yüzden amatör kullanıcılar için gerçekten can sıkıcı ve kafa karıştırıcı bir sorun olacağını hayal edebiliyorum.

Bunun nasıl olabileceğini ve bu sorunun nasıl çoğaltılacağını bilen var mı?

Güncelleme

İlgilenenler için: bu yol bir TFS klasörünün derinliklerinde bulundu. Muhtemelen TFS, açıklanan @grawity işlevini kullanır ( "Çeşitli dosya yöneticileri, arşivleyiciler, vb. )

Nadir bir TFS böceğine karıştı mı?


5
Aşağıdaki cevaplar neler olup bittiğini, kasıtlı olarak nasıl çoğaltacağını ve nasıl düzeltebileceğini ayrıntılı olarak anlatıyor, ancak neden olduğunu anlatmıyorlar. Yana ..belirtmek 'tek klasör yukarı gitmek' için bir yol olarak kullanılabilir, ben bir yerlerde, bazı program veya komut dosyası bir yol oluşturmak için iki string'lerin birleşimi bir tahminde olur, biri ile sona erdi ..ve bir sonraki ile başladı ..ve Aşağıda belirtilen tekniklerden birini kullandığından, aralarındaki klasör ayırıcıyı eksik olmasına rağmen yolu oluşturmayı başardı.
3D1T0R

6
adında yalnızca boşluk olan bir klasör oluşturursanız garip şeyler de olur
phuclv

7
Bu sunucu internette mi? Sadece düzenli istekte bulunan web sunucuları bakan internette girişimleri kesmek bkz uyarmaya: GET /....\\....\\....\\....\\....\\....\\....\\....\\....\\winnt\\win.ini. Açıkça görülüyor ki, bu istismar etmeye çalıştığı bir yerde bir güvenlik açığı vardı.
Andy Brown

4
@AndyBrown çok daha muhtemel .., değil ..... Bu \winnt, başlangıç ​​noktası 9 seviyenin altında olduğu sürece, başlangıç ​​noktasının derinliğinden (web kökü) bağımsız olarak geçiş yapmanın bir yoludur . ..Kök dizinden gitmenin sizi kök dizinde bıraktığı gerçeğine dayanıyor .
Hobs

5
@hobbs Bu, Linux'taki Apache erişim günlüğünden bir kopya ve yapıştırmadır. Orada kesinlikle 4 nokta var. Günlüğe diğer hack girişimleri vardır yapmak kullanımını ..ben bu bir oldukça garip buldum neden oldu.
Andy Brown,

Yanıtlar:


303

Win32 isimleri biten isimlerle dosya veya klasörler oluşturmanıza izin vermez .- tüm noktalar sondan kaldırılır. Oluşturmak için çalışılıyor test.markaları testyerine görünür. (Bu, eski DOS / Win9x dönemi yazılımındaki 8.3 adla uyumluluk içindir.)

Sonuç olarak, bir klasöre erişmeye çalıştığınızda ...., adı boş dizgeye indirgenir ve daha önce bulunduğunuz klasöre geri dönersiniz.

Ancak NT çekirdeği bu tür isimlere izin veriyor. Win32 API'leri tarafından uygulanan dosya adı sınırlamalarını atlayan çeşitli mekanizmalar vardır - örneğin, WSL (Linux için Windows Subsystem) Win32'nin üzerinde çalışmaz ve bundan etkilenmez. Ayrıca, ne yaptıklarını bilen programlar için bırakılan kasıtlı bir "arka kapı" olan \\?\bypass yöntemi de vardır . Eğer yaratamaz rağmen C:\Example\....\, sen yapabilirsiniz oluşturmak \\?\C:\Example\....\gayet.

Aynı şekilde, böyle dizinleri rmdir \\?\C:\path\...Cmd'den silebilirsiniz (Henüz PowerShell ile test etmedim).

Çeşitli dosya yöneticileri, arşivleyiciler vb. \\?\Yöntemi normalden daha uzun yol adlarını kullanabilmek için kullanabilirler - ve böylece, Win32 içindeki uyumluluk kodundan da etkilenmezler; onlar sıyırma yanı sıra gibi sihirli dosya adları çevirisi nokta bypass CONveya NUL.

Yani programlarınızdan biri olabilir:

  1. \\?\dosyalara erişmek için her zaman kullanır ,
  2. yanlışlıkla bir klasör oluşturmaya çalıştım ....- ancak gerçeklerden sonra bunu kesin olarak bilmek mümkün değil.

13
böyle bir klasör yaratmanın başka bir yolu alternatif veri akışlarını kullanmaktır. Cmd üzerinde: echo "" > ....::$INDEX_ALLOCATION. Bu, ....(hala geçerli klasörü işaret eden) adlı bir klasör yaratacaktır .
WorldSEnder


124
Microsoft bu "Genişletilmiş Yol Öneki" olarak adlandırır ve bu öneki olan yollara "genişletilmiş uzunluklu yollar" adı verilir. (komik: \\?\".NET referans kaynağında arama yaptığınızda , sunucularında çalışma zamanı hatasına neden olur).
dlatikay

2
@grawity Yani. . . bu klasörü şimdi nasıl sileceğim?
Shadow503

21
Ne zaman istemci herhangi bir windows makinesinde bir hesap yaptığında, her şey yolunda giderse meraklı bir 'bilgisayar onarımı' müşteri vakası vardı ancak bir kez oturum açtığında / yeniden başlatıldığında hesabına girmesine izin vermedi. oturum, toplantı, celse. Yerel bilgisayar tamircisi güdüklendi (onu hala suçladı). Asıl adının Con olduğu ortaya çıktı ve her zaman onun adını Windows hesabı için kullandı ..... o gün com1sihirli bir dosya
adından

23

@ Grawity'nin cevabına ek olarak, bir Win32 programı bunu doğrudan "native" API'yi arayarak da yapabilir. Yanılmıyorsam, bu durumda, bu NtCreateDirectoryObject olacaktır. Bu çağrılar günümüzde oldukça iyi belgelenmiştir, özellikle de onların çekirdek meslektaşı (bir Win32 programından arayamazsınız), bu durumda, ZwCreateDirectoryObject.

"Sonsuz derinlik" ile ilgili olarak, bunu başarmanın kolay bir yolu bağlantıları kullanmaktır. Bir dizin oluşturun, sonra onun içinde bir bağlantı oluşturun ( mklink /jörneğin kullanabilirsiniz ) ve çok derin bir yapıya sahip olacaksınız. Bunu en son Windows 2000'de yaptığımda, yinelemenin sona ermesine rağmen (“sonsuza dek kazamazsınız”). Muhtemelen daha yeni işletim sistemlerinde, sınır daha büyük veya kaldırılmıştır, aynı zamanda, her birinin öncekinin çocuğu olan 10 dizini ve 10'unda da, ilkine geri dönen bir link oluşturacağını söyleyebilirsiniz.


4
İşte bu çok kötü şeytan malzemesi ...
Agi Hammerthief

1
Buna benzer bir şekilde tüm dizinleri kopyaladım ve diski yapay olarak belirlenen bir sınıra ne zaman yakın olduğunu belirleyebilmek için test etmek için doldurdum.
mickeyf

Ayrıca cygwin's kullanarak çoğaltmak mümkündürmkdir ....
lucidbrot

18

Dizini oluşturmanın daha kolay bir yolu var. Komut isteminden şunu yazın:

MD ....\

ve enter tuşuna basıldığında, dört noktalı bir dizin oluşturulur. Bu dizin aynı zamanda gezginle de görüntülenebilir.

MS-DOS'da sürüm 1.0'a geri giden bir kusur var. MS bir süredir bunu biliyordu, ancak düzeltemedi veya çözemedi. PowerShell ile sorunu düzelttiler.

BTW, denerseniz:

RD ....

Silmek başarısız olur. Kaldırmak için bu belirli sözdizimini kullanmanız gerekir.

RD ....\

Bunu yönettiğim belirli sunucularda kullanıyorum. Genellikle diskin kökünde bir kullanıcı klasörü yaratırım ve başka bir yöneticinin gelip kaldırmasını istemiyorum.

Böylece klasörüme gidip CON, AUX veya LPT gibi bir alt klasör oluşturacağım.

Başka bir Yönetici klasörümü kaldırmak istiyorsa, önce bu alt klasörün nasıl kaldırılacağını bilmeleri gerekir.

EDIT: Bu sabah bu tartışmayı düşünüyordum ve bir adım daha atmaya karar verdim. Mods'un bunun ilgili olup olmadığına karar vereceğini varsayıyorum.

Klasöre CD giremiyorum.

MD c: \ test sonra CD C: \ test ve MD .... \ C: \ test .... ile bitirdim.

ve her şey yolunda.

Ancak CD .... başarısız olur ve beni C: \ testine geri döndürür. (CD .... \ aynı şeyi yapar.)

Ancak DIR .... ve bir direktör listesi alabilirim. Ben de yapabilrim

MD C: \ test .... \ temp ve alt dizinini oluşturur.

Ayrıca C: \ test .... \ temp CD'sini kullanabilir ve bu alt-alt dizine girebilirim.

Ancak, C: \ test .... \ temp, CD ise .. C: \ testine geri döndüm.

Bu dizine cd giremiyorum, ancak alt klasörler oluşturarak klasörü değiştirebilir ve yeterince ilginç bir şey yapabilirim.

ECHO "Test Etme" >> C: \ test .... \ test.txt

ayrıca çalışır ve bu klasörde bir dosya oluşturur. Böylece dört noktalı bir klasör oluşturabilirim, üzerine dosya ve klasör ekleyebilirim, dizin listelerini alabilirim, ancak içine CD yazamıyorum. Bunun için bir çeşit kötü deha kullanımı olabilir mi? Çok uzak mesafeden sapmış olursam modlar için özür dilerim.


6
Bu, komut isteminin yaklaşık yirmi yıldır artık "MS-DOS" olmadığı göz önüne alındığında, bir Win32 API hatası gibi görünüyor.
Grawity

2
İlginç bir şekilde, dizini Windows Gezgini'nde silmeye çalışırsam, sürümünle oluşturduğumda çöküyor. Bunu cygwin ile yarattığımda, başarısız oluyor ve öyle diyor.
lucidbrot

Bir DOS 3.3 ve bir DOS 6.0 makinem var ve komutlar üzerinde çalışıyor. 32 bit'e geçtiklerinde sorun hala oradaydı. tüm sunucu sürümleri de dahil olmak üzere win95'ten günümüze kadar olan CMD penceresinde çalışır. Şimdi Powershell'e geçiyoruz. Artık işe yaramıyor. Dizini oluşturduğunu yazdıktan sonra anladım, ancak OP'nin gördüğü etkiyi sağlamıyor. Dört noktalı dizine CD girmeye çalışırsam, beni geri alır.
Larryc

Windows 7 makinemde MD ....` only creates .... \ .... `ağaç - tek bir özyineleme adımı var.
Tomáš Zato

Merakla FAR yöneticisi bunu hiçbir şekilde özel görmüyor ve hiç sorun yaşamadan "çok nokta" adlı dizinlerin içeriğini yaratıyor / yeniden adlandırıyor / siliyor / listeliyor.
RomanSt

-1

Ben de aynı problemi yaşadım. Benim durumumda, .NET Core yayınlamak için komut verilen bir yazım hatası oldu:

dotnet publish "Api.csproj" --output "....\output\"

Dizini '....' adıyla oluşturdu; Bu dizin ana dizine referans gibi davrandı. Bu klasörün içine girersem, hala üst klasördeydim, ancak yolu '.... \' ekledim.

Bu konuda belirtilen tüm komutları denedim ama hiçbiri işe yaramadı. Anladığım kadarıyla, böyle davrandı, çünkü üst dizinde başka dosya ve dizinler vardı, bu yüzden tüm içeriği tekrarlı bir şekilde silen parametreleri kullanmak zorunda kaldım.

Bu komutu öğrendim:

rmdir /s /q ....\

'....' dizinini kaldırabilirsiniz. Yalnızca bu '....' dizinin gerçekte olduğu, daha fazla değil, daha az olmadığı gibi, ana dizine olan başvuruyu siler. Komut argümanlarına rağmen:

  • / s - kaldırılan dizindeki tüm içeriği kaldırır,
  • / q - onay olmadan kaldırır,

ana dizine dokunulmadan kaldı.


İkinci komutun neden sizin için çalıştığını açıklayabilir misiniz?
Burgi

Dizini, alt dizinleri ve dosyaları silmek gibi komutun neden çalıştığını veya ne yaptığını açıklayamadığınız için oy kullanmayın.
Winter Faulk

Bu aslında '....' adındaki dizini siler. Yalnızca bu '....' dizinin gerçekte olduğu, daha fazla değil, daha az olmadığı gibi, ana dizine olan başvuruyu siler. Bu konuda belirtilen tüm komutları denedim ama hiçbiri çalışmıyor. Anladığım kadarıyla, bu komut işe yaradı, çünkü üst dizinde başka dosya ve dizinler vardı, bu yüzden tüm içeriği tekrarlı bir şekilde silen parametreleri kullanmak zorunda kaldım. Komut argümanlarına rağmen, ana dizin dokunulmadan kaldı.
Mateusz,

Bir şekilde Visual Studio ile aynı durumla karşılaştım ve bu komut saatlerce süren hayal kırıklığının ardından neler olduğunu anlamaya çalışırken pastırmamı kurtardı.
NPNelson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.