Adı nokta (“.”) İle biten bir klasör nasıl silinir?


90

Adı C:\a.\veya C:\b.\, vb. İle biten kötü amaçlı yazılım tarafından oluşturulmuş klasörlerim var .

Bu tür bir klasörü komutla kaldırabilecek bir çözüm buldum rd /q /s "C:\a.\"ancak win API'sini çağırırsam RemoveDirectorygeri dönüyor ERROR_FILE_NOT_FOUND.

Ve böyle bir dizini silmek için nasıl bir işlev yazılacağını merak ediyorum, teşekkürler

Kendi Windows XP SP3 sistemimde böyle test ediyorum

bir klasör oluştur C:\>mkdir a..\\\ve bu klasöre erişmek için çift tıklayamıyorum. ve komutla kaldırabilirim rd /q /s "C:\a.\"

hangi Windows sistem API (ler) i rd /q /sçağırır?


Bunun hala Windows 10'da, Windows güncellemesinin kendisi tarafından olduğuna inanamıyorum (güncellemeden sonra Windows.old'u silemedi).
Damn Vegetables

Yanıtlar:


149

İşte bu soruna bir çözüm :

rd /s "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder."

1
Soru, bir API işlevinin klasörü kaldırmasını istiyor ve ile kaldırılabileceğini belirtiyor rd.
Jcl

4
Yeterince adil - belki de bu yüzden kabul edilen cevap olarak işaretlenmemiştir, ancak yine de aynı soruna takılıp kalmış ancak rd'yi kullanabileceğimiz kullanıcılar için çok yararlıdır.
david.barkhuizen

2
Az önce sinirlerimi kurtardın. Teşekkür ederim! : D
Benny Neugebauer

8
Bunun yalnızca CMD.exe NOT PowerShell'den çalıştığını unutmayın
Lorne K

2
ayrıca CMD.exeyükseltilmemiş komut isteminde çalışmazsa yönetici modunda da çalıştırmayı deneyin
greg

63

Çözüm: RemoveDirectory'yi çağırdığınızda, yolun başına " \\?\" dizesini eklediğinizden emin olun .


Açıklama: Nokta ile ilgili her şeyi vardır. MSDN'ye göre, bir NTFS birimindeki bir dosya veya klasörü silemeyebileceğiniz bazı durumlar vardır, özellikle dosya adı Win32 ad alanında geçersiz olduğunda (bu nedenle dosyayı kullanarak dosyayı açamıyorsunuz) Windows Gezgini'nde normal yöntemler).

Dosya adı geçersiz bir ad içeriyorsa (örneğin, dosya adının sonunda boşluk veya nokta varsa veya dosya adı yalnızca boşluktan oluşuyorsa) dosyayı silemeyebilirsiniz. Bu sorunu çözmek için, dosyayı silmek üzere uygun dahili sözdizimini kullanan bir araç kullanın. Bu dosyalar üzerinde çalışmak için bazı araçlarla birlikte "\\? \" Sözdizimini kullanabilirsiniz, örneğin:
del "\\? \ c: \ path_to_file_that sonda space.txt içerir"
Bu sorunun nedeni Neden 4'e benzer. Ancak, adında boşluk veya nokta bulunan bir dosyayı açmak için tipik Win32 sözdizimini kullanırsanız, asıl dosya açılmadan önce sondaki boşluklar veya noktalar çıkarılır. Bu nedenle, aynı klasörde "AFile.txt" ve "AFile.txt" adlı iki dosyanız varsa (dosya adından sonraki boşluğa dikkat edin), ikinci dosyayı standart Win32 çağrılarını kullanarak açmaya çalışırsanız, bunun yerine ilk dosya. Benzer şekilde, adı yalnızca "" (boşluk karakteri) olan bir dosyanız varsa ve onu standart Win32 çağrılarını kullanarak açmaya çalışırsanız, bunun yerine dosyanın ana klasörünü açarsınız. Bu durumda, bu dosyalardaki güvenlik ayarlarını değiştirmeye çalışırsanız, bunu yapamayabilirsiniz veya farklı dosyalardaki ayarları beklenmedik şekilde değiştirebilirsiniz.

(Kaynak: http://support.microsoft.com/?kbid=320081 )


Adı "." İle biten bir dosyayı silmem için mükemmel bir şekilde çalıştı. Çok teşekkür ederim !
AFract

1
Del to rd gibi çalıştırd "\\?\C:\Users\ahmed\Desktop\buggy."
guneysus

Bu cmd'de harika çalışıyor, ancak PowerShell için bir eşdeğeri var mı? rdiçinde pwsh, remove-item\\? \ `desteklemeyen bir takma addır .
Kagami Sascha Rosylight

1
Elbette öyle. PowerShell'in rd'sini böyle bir dosyayı silmek için kullandım ve gayet iyi çalıştı. Söz diziminizi iki kez kontrol edin.
SilverbackNet

Vay. Bir veri kümesinde bazı Doğal Dil İşleme yapmaya çalışırken (veri kümesindeki her dosya adlandırılır {IncrementalNumber}.) bu sorunla karşılaştım ve veri işleme komut dosyalarımın neden başarısız olduğu konusunda kafam çok karıştı. Bu şimdi mantıklı geliyor, ancak davranış o kadar beklenmedik görünüyor ki, bir boşluk veya nokta ile biten dosya adlarını hatalı şekilde işleyen uygulamalar nedeniyle güvenlik sonuçları olabilir.
Spencer D

46

Bunu SU'ya gönderdim ve buraya da göndermeye karar verdim. Bunu başarmanın en basit, en hızlı ve en kolay yolu. Şimdi ne kadar basit olduğuna gülüyorum.

  1. WinRAR'ı yükleyin
  2. Resimlerden Adım Adım prosedürü izleyin:
  3. görüntü açıklamasını buraya girin
  4. görüntü açıklamasını buraya girin
  5. görüntü açıklamasını buraya girin
  6. görüntü açıklamasını buraya girin

WinRaR'ı kendim kurdum, bu yüzden geçici çözümü göstermeye karar verdim.
Bu geçici çözüm, 7zip kullanılarak da mümkündür.

Söylemem gereken bir diğer şey de, sorunun windows explorer kullanımından kaynaklandığı ve diğer herhangi bir dosya tarayıcısının (winrar dosya tarayıcısının kendisi, ftp gezginleri vb.) Bu dosyaları normal olarak ele alacağıdır.
Herhangi bir dosya tarayıcısını kullanmayı deneyebilir ve bu dosyaları silebilir ve arşivleme zahmetine girmeyebilirsiniz! Şerefe!


6
Ne yaratıcı bir çözüm!
Nosgoroth

9

Eğer git yüklüyse (aralarından ir alabilirsiniz burada o zaman kadar basit gibidir):

  1. Dosya Gezgini'ni sorunlu klasörün bulunduğu konuma gidin.
  2. Bağlam menüsü (sağ fare düğmesi)> Git Bash Here.
  3. rm -rf Foldername./

rm: cannot remove ‘.bin’: Directory not empty
Green

@Green, klasör içeriğini silme izniniz varsa, -rfbölüm klasör içeriğiyle ilgilenmelidir.
Laurynas Lazauskas

8

Adın "a" olduğunu, ancak gerçek adın "a .." olduğunu gördüğünüzde

Bunu dene:

rd /q /s "C:\a..\"

Ve klasörü şu koda göre keşfetmeyi deneyebilirsiniz:

for /f "tokens=3 delims=<>" %%a in ('dir /ad /x "C:\*" ^| findstr " a\.\.$"') do (
  for /f "tokens=1" %%b in ("%%a") do start "" "%%~fb"
)

5

" WinRar " ı kullandım Basit bir RAR, ZIP işlemcisi. Her türlü dosya adı düzenleyicisini kullanabilirsiniz. Dosyanızın WinRar'da bulunduğu dizini açın ve yeniden adlandırmak istediğiniz dosyaya / klasöre sağ tıklayıp yeni adı doldurduktan sonra yeniden adlandırmayı seçin.


Bunun nasıl yardımı dokunacak?
Tavo

1
Dosyaya / klasöre göz atmanıza ve dosyayı yeniden adlandırmanıza yardımcı olur ... ve yapıldı.
Aryan

1
Bu aslında bana yardımcı oldu; WinRar'ı, biri dönemle biten bir klasör içeren bir grup dosyayı açmak için kullandım. Windows onu silemedi veya gerçekten yeniden adlandıramadı, ancak WinRar'da sorun olmadan yeniden adlandırabilir ve ardından Windows Gezgini'nde silebilirim (10 kazanın). Teşekkürler!
Nick,


0

Windows 10'da Ubuntu'dan bash rm komutunu kullanın


rm: cannot remove ‘.bin’: Directory not empty
Green

0

Eğer dosyaları saklamak istiyorsanız, seçenekler de bash içinde.
Linux paketi için Windows Alt Sistemine ihtiyacınız olacak (Ubuntu yüklüyüm)

dosyaları saklamak için. bir komut istemi açın ve dosyanın veya klasörün bulunduğu yere cd yapın.
şimdi " bash"
yazın, bu komut isteminde bash'ı açacaktır. şimdi girin mv '[folder or file you want to move]' '[new name (can include path)]'(mv'ye daha fazlası var, bu nedenle tüm seçeneklerinde okumak istiyorsanız 'man mv' kullanın, bu kılavuz sayfasını açacaktır (sonra bash'ye dönmek için q kullanın))
mv komutu hareket için kısadır, ancak onun şeyleri yeniden adlandırmak gibi ikincil bir işlevi vardır.
ayrıca bash'de "tek tırnak" kullanın ve normal bir "çift tırnak" kullanmayın, çünkü bash "tek tırnak" beklentisi içindedir.

işte bir örnek. klasörünüzün " data 1." olarak adlandırıldığını varsayın c:\users(bu nedenle hata klasörünün tam yolu c:\users\data 1.
1. herhangi bir yöntemi kullanarak komut istemini açın
2. girin cd c:\users
3. şimdi bashdaha önce bulunduğunuz klasöre bu yükler bash
yazın 4. son olarak mv 'data 1.' 'data 1'
5 yazın. klasöre artık erişilebilir ve onu silmeyi seçebilirsiniz.

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.