Recebi algumas pastas criadas por malware cujo nome terminava com um ponto, como C:\a.\
ou C:\b.\
etc.
Eu encontrei uma solução que pode remover essa pasta com o comando, rd /q /s "C:\a.\"
mas se eu chamar o win API RemoveDirectory
, ele retorna ERROR_FILE_NOT_FOUND
.
E eu só me pergunto como escrever uma função para excluir esse diretório, obrigado
Eu testo em meu próprio sistema Windows XP SP3 assim
criar uma pasta C:\>mkdir a..\\\
e não posso clicar duas vezes para acessar essa pasta. e posso remover com o comando rd /q /s "C:\a.\"
quais API (s) do sistema Windows esse rd /q /s
comando chama?
Respostas:
Aqui está uma solução para este problema :
rd /s "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder."
fonte
rd
.CMD.exe
no modo de administrador também se não funcionar no prompt de comando não elevadoSolução: ao chamar RemoveDirectory, certifique-se de prefixar o caminho com a string "
\\?\
".Explicação: Tem tudo a ver com o ponto. De acordo com o MSDN, há certos casos em que você pode não ser capaz de excluir um arquivo ou pasta em um volume NTFS, especificamente quando o nome do arquivo é inválido no namespace do Win32 (é por isso que você não consegue abrir o arquivo usando o métodos normais no Windows Explorer).
(Fonte: http://support.microsoft.com/?kbid=320081 )
fonte
rd "\\?\C:\Users\ahmed\Desktop\buggy."
rd
em pwsh é um apelidoremove-item
que não suporta `\\? \`.{IncrementalNumber}.
) e fiquei muito confuso sobre por que meus scripts de processamento de dados estavam falhando. Isso agora faz sentido, mas parece que o comportamento é tão inesperado que pode ter ramificações de segurança devido ao fato de os aplicativos lidarem incorretamente com nomes de arquivos que terminam em um espaço ou ponto.Eu postei isso no SU e decidi postar aqui também. É a maneira mais simples, rápida e fácil de conseguir isso. Agora estou rindo de como isso é simples.
Eu mesmo instalei o WinRaR, então decidi demonstrar a solução alternativa nele.
Esta solução alternativa também é possível usando 7zip.
Outra coisa que devo mencionar é que, como parece que o problema é causado pelo uso do Windows Explorer e qualquer outro navegador de arquivos (como o próprio navegador de arquivos winrar, exploradores ftp etc.) tratará esses arquivos como normais.
Você pode tentar usar qualquer navegador de arquivos e simplesmente excluir esses arquivos e não se preocupar em arquivá-los! Felicidades!
fonte
Se você tiver o git instalado (você pode obtê-lo aqui ), é tão simples como:
rm -rf Foldername./
fonte
rm: cannot remove ‘.bin’: Directory not empty
-rf
parte deve cuidar do conteúdo da pasta.Quando você vê o nome é "a.", Mas o nome real é "a .."
Experimente isto:
rd /q /s "C:\a..\"
E você pode tentar explorar a pasta por este código:
for /f "tokens=3 delims=<>" %%a in ('dir /ad /x "C:\*" ^| findstr " a\.\.$"') do ( for /f "tokens=1" %%b in ("%%a") do start "" "%%~fb" )
fonte
Eu usei " WinRar " Um processador RAR simples, ZIP. Você pode usar qualquer tipo de editor de nome de arquivo. Basta abrir o diretório onde seu arquivo está no WinRar e selecionar renomear após clicar com o botão direito no arquivo / pasta que deseja renomear e preencher o novo nome.
fonte
Tente usar o programa unlocker para excluir arquivos e pastas que você não pode excluir normalmente.
fonte
Use o comando bash rm do Ubuntu no Windows 10
fonte
rm: cannot remove ‘.bin’: Directory not empty
se você quiser manter os arquivos, também há opções no bash.
você precisará do pacote de subsistema do Windows para Linux (tenho o Ubuntu instalado)
para manter os arquivos. abra um prompt de comando e cd para onde o arquivo ou pasta está localizado.
agora digite "
bash
"isso abrirá o bash no prompt. agora digite
mv '[folder or file you want to move]' '[new name (can include path)]'
(há mais para mv então se você quiser ler todas as suas opções use 'man mv' isto irá abrir sua página de manual (então use q para retornar ao bash))o comando mv é uma abreviação de move, mas é tem uma função secundária de renomear as coisas.
também no bash use 'aspas simples' e não as "aspas duplas" normais, pois o bash espera 'aspas simples'.
aqui está um exemplo. suponha que sua pasta tenha o nome "
data 1.
" localizada emc:\users
(portanto, o caminho completo para a pasta de erro éc:\users\data 1.
1. abra o prompt de comando usando qualquer método
2. digite
cd c:\users
3. agora digite
bash
este carrega bash na pasta em que você estava anteriormente4. finalmente digite
mv 'data 1.' 'data 1'
5. a pasta agora está acessível e você pode optar por excluí-la.
fonte