Jak usunąć folder, którego nazwa kończy się kropką („.”)?

89

Mam kilka folderów utworzonych przez złośliwe oprogramowanie, których nazwa kończy się kropką, np. C:\a.\Lub C:\b.\itp.

Znalazłem rozwiązanie, które może usunąć taki folder za pomocą polecenia, rd /q /s "C:\a.\"ale jeśli wywołam win API RemoveDirectory, zwraca ERROR_FILE_NOT_FOUND.

Zastanawiam się tylko, jak napisać funkcję usuwania takiego katalogu, dzięki

Testuję na swoim własnym systemie Windows XP SP3 w ten sposób

utworzyć folder C:\>mkdir a..\\\i nie mogę dwukrotnie kliknąć, aby uzyskać dostęp do tego folderu. i mogę usunąć na polecenie rd /q /s "C:\a.\"

jakie API systemu Windows rd /q /swywołuje to polecenie?

jerry.liu
źródło
Nie mogę uwierzyć, że to nadal dzieje się w systemie Windows 10, przez samą aktualizację systemu Windows (nie mógł usunąć Windows.old po aktualizacji).
Cholerne warzywa

Odpowiedzi:

147

Oto rozwiązanie tego problemu :

rd /s "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder."
Skilldrick
źródło
1
Pytanie wymaga funkcji API do usunięcia folderu i stwierdza, że ​​można go usunąć rd.
Jcl
4
W porządku - może dlatego nie jest oznaczony jako zaakceptowana odpowiedź, ale mimo to jest bardzo przydatny dla tych, którzy mają ten sam problem, ale gdzie możemy użyć rd.
david.barkhuizen
2
Właśnie uratowałeś mi nerwy. Dziękuję Ci! : D
Benny Neugebauer
8
Zauważ, że działa to tylko z CMD.exe NIE PowerShell
Lorne K
2
spróbuj również uruchomić CMD.exew trybie administratora, jeśli nie działa w wierszu polecenia bez podwyższonego poziomu uprawnień
greg
63

Rozwiązanie: podczas wywoływania RemoveDirectory upewnij się, że ścieżka została poprzedzona ciągiem „ \\?\”.


Wyjaśnienie: To wszystko ma związek z kropką. Według MSDN istnieją pewne przypadki, w których usunięcie pliku lub folderu na woluminie NTFS może nie być możliwe, zwłaszcza gdy nazwa pliku jest nieprawidłowa w przestrzeni nazw Win32 (dlatego nie można otworzyć pliku za pomocą normalne metody w Eksploratorze Windows).

Usunięcie pliku może nie być możliwe, jeśli nazwa pliku zawiera nieprawidłową nazwę (na przykład nazwa pliku zawiera spację na końcu lub kropkę lub nazwa pliku składa się wyłącznie ze spacji). Aby rozwiązać ten problem, użyj narzędzia, które używa odpowiedniej składni wewnętrznej do usunięcia pliku. Możesz użyć składni „\\? \” Z niektórymi narzędziami do operowania na tych plikach, na przykład:
del "\\? \ c: \ ścieżka_do_pliku_, który zawiera końcową spację.txt"
Przyczyna tego problemu jest podobna do Przyczyna 4. Jeśli jednak używasz typowej składni Win32 do otwierania pliku, którego nazwa ma końcowe spacje lub kropki, końcowe spacje lub kropki są usuwane przed otwarciem pliku. Dlatego, jeśli masz dwa pliki w tym samym folderze o nazwach „AFile.txt” i „AFile.txt” (zwróć uwagę na spację po nazwie pliku), jeśli spróbujesz otworzyć drugi plik przy użyciu standardowych wywołań Win32, otwórz zamiast tego pierwszy plik. Podobnie, jeśli masz plik, którego nazwa to po prostu „” (znak spacji) i próbujesz otworzyć go za pomocą standardowych wywołań Win32, zamiast tego otwierasz folder nadrzędny pliku. W tej sytuacji, jeśli spróbujesz zmienić ustawienia zabezpieczeń w tych plikach, możesz nie być w stanie tego zrobić lub możesz nieoczekiwanie zmienić ustawienia w innych plikach.

(Źródło: http://support.microsoft.com/?kbid=320081 )

Cody Gray
źródło
Udało mi się idealnie usunąć plik z nazwą kończącą się na „.”. Dziękuję Ci bardzo !
AFract
1
rd "\\?\C:\Users\ahmed\Desktop\buggy."
Zadziałało
Działa to świetnie w cmd, ale czy istnieje odpowiednik dla PowerShell? rdw pwsh jest aliasem, remove-itemktóry nie obsługuje `\\? \`.
Kagami Sascha Rosylight
1
Jasne, że tak. Właśnie użyłem rd programu PowerShell do usunięcia takiego pliku i działało dobrze. Dokładnie sprawdź swoją składnię.
SilverbackNet
Łał. Natknąłem się na ten problem, próbując wykonać pewne przetwarzanie języka naturalnego na zestawie danych (każdy plik w zestawie danych ma nazwę {IncrementalNumber}.) i byłem bardzo zdezorientowany, dlaczego moje skrypty przetwarzające dane zawodzą. Teraz ma to sens, ale wydaje się, że zachowanie jest tak nieoczekiwane, że może mieć konsekwencje dla bezpieczeństwa, ponieważ aplikacje nieprawidłowo obsługują nazwy plików kończące się spacją lub kropką.
Spencer D
46

Opublikowałem to na SU i zdecydowałem się też zamieścić to tutaj. To najprostszy, najszybszy i najłatwiejszy sposób na osiągnięcie tego. Śmieję się teraz, jakie to proste.

  1. Zainstaluj WinRAR
  2. Postępuj zgodnie z procedurą krok po kroku na zdjęciach:
  3. wprowadź opis obrazu tutaj
  4. wprowadź opis obrazu tutaj
  5. wprowadź opis obrazu tutaj
  6. wprowadź opis obrazu tutaj

Sam zainstalowałem WinRaR, więc postanowiłem zademonstrować w nim obejście.
To obejście jest również możliwe przy użyciu 7zip.

Kolejną rzeczą, o której powinienem wspomnieć, jest to, że wydaje się, że problem jest spowodowany użyciem Eksploratora Windows, a każda inna przeglądarka plików (np. Sama przeglądarka plików winrar, eksploratory ftp itp.) Traktuje te pliki jako normalne.
Możesz spróbować użyć dowolnej przeglądarki plików i po prostu usunąć te pliki i nie zawracać sobie głowy ich archiwizacją! Twoje zdrowie!

AmirHossein
źródło
6
Cóż za kreatywne rozwiązanie!
Nosgoroth
8

Kiedy widzisz, że nazwa to „a.”, Ale rzeczywista nazwa to „a ..”

Spróbuj tego:

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

Możesz spróbować eksplorować folder za pomocą tego kodu:

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

Jeśli masz zainstalowany git (możesz pobrać ir z tego miejsca ), jest to tak proste, jak:

  1. Przejdź do Eksploratora plików do lokalizacji, w której znajduje się problematyczny folder.
  2. Menu kontekstowe (prawy przycisk myszy)> Git Bash tutaj.
  3. rm -rf Foldername./
Laurynas Lazauskas
źródło
rm: cannot remove ‘.bin’: Directory not empty
Green
@Zielony Jeśli masz uprawnienia do usuwania zawartości folderu, -rfczęść powinna zająć się zawartością folderu.
Laurynas Lazauskas
5

Użyłem " WinRar " Prosty procesor RAR, ZIP. Możesz użyć dowolnego edytora nazw plików. Po prostu otwórz katalog, w którym znajduje się twój plik, w WinRar i wybierz zmień nazwę po kliknięciu prawym przyciskiem myszy pliku / folderu, którego nazwę chcesz zmienić, i wpisz nową nazwę.

aryjski
źródło
Jak to ma pomóc?
Tavo
1
Pomaga przeglądać plik / folder i zmieniać nazwę pliku na cokolwiek ... i gotowe.
Aryan
1
To faktycznie mi pomogło; Użyłem WinRara do rozpakowania kilku plików, z których jeden zawierał folder kończący się kropką. Windows nie mógł go usunąć ani naprawdę zmienić jego nazwy, ale mogłem zmienić jego nazwę bez problemu w WinRar, a następnie usunąć go w Eksploratorze Windows (win 10). Dzięki!
Nick
2

Spróbuj użyć programu odblokowującego , aby usunąć pliki i foldery, których nie możesz normalnie usunąć.

RyuuGan
źródło
3
Ciekawi mnie, jak odblokować to może!
jerry.liu
0

Użyj polecenia bash rm z Ubuntu w systemie Windows 10

kreker
źródło
rm: cannot remove ‘.bin’: Directory not empty
Green
0

jeśli chcesz zachować te pliki również w bashu.
będziesz potrzebować pakietu Windows Subsystem for Linux (mam zainstalowany Ubuntu)

aby zachować pliki. otwórz wiersz polecenia i przejdź do miejsca, w którym znajduje się plik lub folder.
teraz wpisz „ bash
to otworzy bash w zachęcie. teraz wejść mv '[folder or file you want to move]' '[new name (can include path)]'(theres więcej do mv, więc jeśli chcesz przeczytać na wszystkich jego opcji użyć „man mv” to otworzy stronę podręcznika (użyj q, aby powrócić do bash))
Polecenie mv jest krótki dla ruchu, ale jego ma drugorzędną funkcję zmiany nazwy rzeczy.
również w bash używaj „pojedynczych cudzysłowów”, a nie zwykłego „podwójnego cudzysłowu”, ponieważ bash oczekuje „pojedynczych cudzysłowów”.

oto przykład. załóżmy, że twój folder nosi nazwę „ data 1.” i znajduje się w c:\users(więc pełna ścieżka do folderu błędów toc:\users\data 1.
1. otwórz wiersz poleceń dowolną metodą
2. wpisz cd c:\users
3. teraz wpisz bashto ładuje bash w folderze, w którym byłeś poprzednio
4. wreszcie wpisz mv 'data 1.' 'data 1'
5. folder jest teraz dostępny i możesz go usunąć.

mer2329
źródło