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 /s
wywołuje to polecenie?
Odpowiedzi:
Oto rozwiązanie tego problemu :
rd /s "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder."
źródło
rd
.CMD.exe
w trybie administratora, jeśli nie działa w wierszu polecenia bez podwyższonego poziomu uprawnień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).
(Źródło: http://support.microsoft.com/?kbid=320081 )
źródło
rd "\\?\C:\Users\ahmed\Desktop\buggy."
rd
w pwsh jest aliasem,remove-item
który nie obsługuje `\\? \`.{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ą.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.
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!
źródło
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" )
źródło
Jeśli masz zainstalowany git (możesz pobrać ir z tego miejsca ), jest to tak proste, jak:
rm -rf Foldername./
źródło
rm: cannot remove ‘.bin’: Directory not empty
-rf
część powinna zająć się zawartością folderu.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ę.
źródło
Spróbuj użyć programu odblokowującego , aby usunąć pliki i foldery, których nie możesz normalnie usunąć.
źródło
Użyj polecenia bash rm z Ubuntu w systemie Windows 10
źródło
rm: cannot remove ‘.bin’: Directory not empty
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ę wc:\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
bash
to ładuje bash w folderze, w którym byłeś poprzednio4. wreszcie wpisz
mv 'data 1.' 'data 1'
5. folder jest teraz dostępny i możesz go usunąć.
źródło