Come eliminare una cartella il cui nome termina con un punto (".")?


90

Ho alcune cartelle create da malware il cui nome terminava con un punto come C:\a.\o C:\b.\, ecc.

Ho trovato una soluzione che può rimuovere tale cartella con il comando rd /q /s "C:\a.\"ma se chiamo win API RemoveDirectory, ritorna ERROR_FILE_NOT_FOUND.

E mi chiedo solo come scrivere una funzione per eliminare tale directory, grazie

Provo sul mio sistema Windows XP SP3 in questo modo

creare una cartella C:\>mkdir a..\\\e non posso fare doppio clic per accedere a questa cartella. e posso rimuovere con il comando rd /q /s "C:\a.\"

quali API di sistema Windows che rd /q /schiamano al comando?


Non posso credere che ciò accada ancora in Windows 10, dall'aggiornamento di Windows stesso (non è stato possibile eliminare Windows.old dopo l'aggiornamento).
Damn Vegetables

Risposte:


149

Ecco una soluzione a questo problema :

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

1
La domanda richiede una funzione API per rimuovere la cartella e afferma che può essere rimossa con rd.
Jcl

4
Abbastanza giusto - forse è per questo che non è contrassegnata come risposta accettata, ma è comunque molto utile per coloro che hanno lo stesso problema ma dove possiamo usare rd.
david.barkhuizen

2
Mi hai appena salvato i nervi. Grazie! : D
Benny Neugebauer

8
Nota che questo funziona solo da CMD.exe NON PowerShell
Lorne K

2
prova anche a eseguire anche CMD.exein modalità amministratore se non funziona nel prompt dei comandi non con
privilegi

63

Soluzione: quando si chiama RemoveDirectory, assicurarsi di aggiungere al percorso il prefisso " \\?\".


Spiegazione: ha tutto a che fare con il punto. Secondo MSDN, in alcuni casi potresti non essere in grado di eliminare un file o una cartella su un volume NTFS, in particolare quando il nome del file non è valido nello spazio dei nomi Win32 (motivo per cui non puoi aprire il file utilizzando il metodi normali in Windows Explorer).

Potrebbe non essere possibile eliminare un file se il nome del file include un nome non valido (ad esempio, il nome del file ha uno spazio finale o un punto finale o il nome del file è composto solo da uno spazio). Per risolvere questo problema, utilizzare uno strumento che utilizza la sintassi interna appropriata per eliminare il file. È possibile utilizzare la sintassi "\\? \" Con alcuni strumenti per operare su questi file, ad esempio:
del "\\? \ c: \ path_to_file_that contiene uno spazio finale.txt"
La causa di questo problema è simile alla causa 4. Tuttavia, se si utilizza la sintassi tipica di Win32 per aprire un file che contiene spazi finali o punti finali nel nome, gli spazi oi punti finali vengono rimossi prima che il file effettivo venga aperto. Pertanto, se nella stessa cartella sono presenti due file denominati "AFile.txt" e "AFile.txt" (notare lo spazio dopo il nome del file), se si tenta di aprire il secondo file utilizzando le chiamate Win32 standard, si apre il primo file invece. Allo stesso modo, se si dispone di un file il cui nome è solo "" (un carattere di spazio) e si tenta di aprirlo utilizzando chiamate Win32 standard, si apre invece la cartella principale del file. In questa situazione, se si tenta di modificare le impostazioni di sicurezza su questi file, potrebbe non essere possibile farlo o è possibile modificare inaspettatamente le impostazioni su file diversi.

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


Ha funzionato perfettamente per me per eliminare un file il cui nome termina con ".". Grazie mille !
AFract

1
Ha funzionato passando da del a rd comerd "\\?\C:\Users\ahmed\Desktop\buggy."
guneysus

Funziona alla grande su cmd ma esiste un equivalente per PowerShell? rdin pwsh è un alias di remove-itemcui non supporta `\\? \`.
Kagami Sascha Rosylight

1
Certo che lo fa. Ho appena usato rd di PowerShell per eliminare un file del genere e ha funzionato perfettamente. Ricontrolla la sintassi.
SilverbackNet

Wow. Sono incappato in questo problema mentre cercavo di eseguire l'elaborazione del linguaggio naturale su un set di dati (ogni file nel set di dati è denominato {IncrementalNumber}.) ed ero molto confuso sul motivo per cui i miei script di elaborazione dei dati non funzionavano. Questo ora ha senso, ma sembra che il comportamento sia così inaspettato che potrebbe avere ramificazioni sulla sicurezza a causa delle applicazioni che gestiscono in modo errato i nomi di file che terminano con uno spazio o un punto.
Spencer D

46

L'ho pubblicato su SU e ho deciso di pubblicarlo anche qui. È il modo più semplice, veloce e facile per raggiungere questo obiettivo. Ora sto ridendo di quanto sia semplice.

  1. Installa WinRAR
  2. Segui la procedura passo passo dalle immagini:
  3. inserisci qui la descrizione dell'immagine
  4. inserisci qui la descrizione dell'immagine
  5. inserisci qui la descrizione dell'immagine
  6. inserisci qui la descrizione dell'immagine

Io stesso avevo WinRaR installato, quindi ho deciso di dimostrare la soluzione alternativa.
Questa soluzione alternativa è possibile anche utilizzando 7zip.

Un'altra cosa che dovrei menzionare è che, poiché sembra che il problema sia causato dall'utilizzo di Windows Explorer e qualsiasi altro browser di file (come lo stesso browser di file winrar, gli esploratori ftp ecc.) Tratterà questi file come normali.
Potresti provare a utilizzare qualsiasi browser di file e semplicemente eliminare quei file senza preoccuparti di archiviarli! Saluti!


6
Che soluzione creativa!
Nosgoroth

9

Se hai installato git (puoi ottenere ir da qui ), allora è semplice come:

  1. Navigare in Esplora file nella posizione in cui si trova la cartella problematica.
  2. Menu contestuale (tasto destro del mouse)> Git Bash Here.
  3. rm -rf Foldername./

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

@ Verde se si dispone delle autorizzazioni per eliminare il contenuto della cartella, la -rfparte dovrebbe occuparsi del contenuto della cartella.
Laurynas Lazauskas

8

Quando vedi il nome è "a.", Ma il nome effettivo è "a .."

Prova questo:

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

E puoi provare a esplorare la cartella con questo codice:

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

Ho usato " WinRar " Un semplice processore ZIP RAR. È possibile utilizzare qualsiasi tipo di editor di nomi di file. Basta aprire la directory in cui si trova il file in WinRar e selezionare Rinomina dopo aver fatto clic con il pulsante destro del mouse sul file / cartella che si desidera rinominare e inserire il nuovo nome.


Come dovrebbe aiutare?
Tavo

1
Ti aiuta a sfogliare il file / cartella e rinominare il file in qualsiasi cosa ... e fatto.
Aryan

1
Questo in realtà mi ha aiutato; Avevo usato WinRar per decomprimere un mucchio di file, uno dei quali includeva una cartella che termina con un punto. Windows non ha potuto eliminarlo o rinominarlo davvero, ma potrei rinominarlo senza problemi in WinRar e quindi eliminarlo in Windows Explorer (win 10). Grazie!
Nick May

2

Prova a utilizzare il programma di sblocco per eliminare file e cartelle che non puoi eliminare normalmente.


3
Sono curioso di sapere come può sbloccare farlo!
jerry.liu

0

Usa il comando bash rm da Ubuntu su Windows 10


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

0

se vuoi mantenere i file ci sono anche delle opzioni in bash.
avrai bisogno del pacchetto Sottosistema Windows per Linux (ho installato Ubuntu)

per conservare i file. apri un prompt dei comandi e fai il cd dove si trova il file o la cartella.
ora digita " bash"
questo aprirà bash nel prompt. ora inserisci mv '[folder or file you want to move]' '[new name (can include path)]'(c'è di più su mv quindi se vuoi leggere tutte le sue opzioni usa 'man mv' questo aprirà la sua pagina di manuale (quindi usa q per tornare a bash))
il comando mv è l'abbreviazione di move, ma è ha una funzione secondaria di rinominare le cose.
anche in bash usa 'virgolette singole' e non una normale "virgoletta doppia", poiché bash si aspetta 'virgolette singole'.

ecco un esempio. supponi che la tua cartella abbia il nome " data 1." che si trova in c:\users(quindi il percorso completo della cartella degli errori è c:\users\data 1.
1. apri il prompt dei comandi utilizzando qualsiasi metodo
2. inserisci cd c:\users
3. ora digita bashquesto carica bash nella cartella in cui ti trovavi in ​​precedenza
4. infine digita mv 'data 1.' 'data 1'
5. la cartella è ora accessibile e puoi scegliere di eliminarla.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.