2009-12-03 19:23:09 +0000 2009-12-03 19:23:09 +0000
387
387

Como apagar directórios com caminho/nomes demasiado longos para apagar normalmente

O Windows parece ter um limite de comprimento nos nomes dos ficheiros quando tenta apagar, embora isso não impeça a criação desses ficheiros.

O nosso processo de compilação cria vários ficheiros temporários (muitos são compilados a partir de uma WSDL) que correm dentro desse limite. Nosso script ant é de alguma forma capaz de apagá-los ao fazer uma limpeza, mas às vezes eu preciso apagar o diretório da área de trabalho (para onde vão todos os arquivos temporários) sem realmente fazer uma limpeza completa do ant.

Estes são os mesmos erros esta pergunta , mas as respostas lá não funcionam para mim já que estou lidando com um diretório, não um arquivo, e eu nem sempre sei quais arquivos específicos ou subdiretórios estão causando o problema. E estou a tentar evitar qualquer processo manual (além de accionar um único comando) para os apagar.

Se eu tentar apagar o directório do Explorer, recebo o erro

Cannot delete [file name]: The file name you specified is not valid or too long.  
Specify a different file name

Tentar Remove-Item em powerhell dá o seguinte erro:

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:12
+ Remove-Item <<<< -force -Recurse <directory>

Alguém sabe de alguma ferramenta ou maneira fácil de contornar este erro de apagar sem ter de encontrar manualmente os ficheiros problemáticos e movê-los/renomeá-los?

Respostas (23)

432
432
432
2009-12-03 19:48:56 +0000

Utilize o 7-Zip File Manager para os apagar.

Se ainda tiver problemas, certifique-se de que utiliza o Shift+Delete dentro do 7-Zip File Manager. Caso contrário, o Windows tenta movê-los para a lixeira (que irá falhar novamente).

311
311
311
2014-07-04 06:23:55 +0000

Nenhuma das outras respostas (gratuitas) aqui funcionou comigo, mas encontrei uma noutro site:

rimraf <dir>

rimraf é um pacote Node.js , por isso terá de instalar o Node.js que inclui npm . Depois pode correr:

npm install -g rimraf

Depois pode correr rimraf a partir da linha de comandos.

Encontrei esta solução porque o próprio npm estava a causar este problema devido à forma como aninha dependências.

A propósito, rimraf recebe o seu nome do comando UNIX rm -rf, que apaga recursivamente ficheiros e pastas.

155
155
155
2016-03-03 16:45:54 +0000

Não é necessário instalar qualquer programa** para resolver este problema.

Este problema é facilmente resolvido utilizando o robocopy, pré-instalado desde o Windows Vista, lançado em 2006.

Por exemplo, o rmdir /S /Q <dir> foi reportado como tendo falhado em alguns casos. Não há necessidade de utilizar o 7zip ou qualquer outra ferramenta de terceiros. O Powershell é um exagero. O Cygwin pode funcionar, mas você pode não ter instalado. Portanto, vamos focar em robocopy

A ideia é

  1. usar robocopy para copiar+atualizado
  2. de uma nova pasta vazia
  3. para a pasta que pretende apagar, o alvo.

Depois de executar robocopy, o directório alvo também estaria vazio.

Estas instruções são para a linha de comandos. Basta abrir a pesquisa no Windows, digitar cmd e pressionar Enter.

Digamos que o target para apagar é:

C:\delete\this folder\with a very long name

Procedemos da seguinte forma:

  1. Primeiro crie um directório vazio, f.i. C:\emptyfolder.

  2. Copiar+actualizar do directório vazio para o alvo, usando a opção /purge

  3. Elimine o directório vazio. Já não precisa dele.

Como não existem ficheiros ou pastas no directório de origem (C:\emptyfolder), basta apagar recursivamente os ficheiros e pastas sob o directório de destino (C:\delete\this folder\with a very long name)!

  • Truque final: pode evitar escrever à mão

** Tenha cuidado** : Os ficheiros eliminados ** não irão para a pasta do lixo***! Uma vez apagados, os ficheiros não podem ser recuperados.

(retirado de “Path too long? Use Robocopy” da BVLANGEN )

PS: Percebo que esta resposta estava aqui, menos didáctica. Como apagar um ficheiro no Windows com um nome de ficheiro demasiado longo? [duplicado] Benoit adicionado:

Você pode precisar passar por este processo mais de uma vez para se livrar de todos os arquivos.

86
86
86
2009-12-03 19:24:08 +0000

Creio ter encontrado uma forma de apagar coisas da cmd. Originalmente tentei o comando del, mas isso não funcionou. Depois lembrei-me do rmdir. Fazendo o seguinte:

rmdir /S /Q <dir>

parece ter funcionado.

30
30
30
2014-11-25 20:22:32 +0000

A ferramenta que utilizei quando tive este problema foi FastCopy . Seleccionei Delete All a partir do dropdown, seleccionei o directório que queria apagar, e clique em Delete All.

FastCopy é portátil (não é necessário instalar), e existem versões de 32 bits e 64 bits disponíveis.

26
26
26
2014-09-26 19:40:05 +0000

Cygwin’s rm -rf funciona bem em longos caminhos!

26
26
26
2014-10-28 06:09:34 +0000

Sem instalar software adicional, pode utilizar o comando subst para criar temporariamente um alias para um directório com nomes longos.

e.g. Se quiser apagar a pasta C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted pode utilizar o comando

subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"

e depois pode apagar X:\folder to be deleted no Windows Explorer ou no prompt de comando facilmente. Para remover a letra da unidade temporária utilize o comando

subst x: /d
```.
22
22
22
2011-04-22 16:00:01 +0000

Basta largar o Powershell para o comando, correndo para baixo:

Cmd /C "rmdir /S /Q <dir>"
18
18
18
2015-06-25 14:19:53 +0000

A solução da Dentrasi ](https://superuser.com/a/78458/10407) é a que funcionou melhor para mim, mas eu queria colocar os passos específicos numa resposta de nível superior.

  1. Descarregar e instalar o último build estável do 7zip .
  2. Execute o gestor de ficheiros 7zip ( 7zfm.exe* ).
  3. No 7zip File Manager, navegue para que possa ver o nome da pasta que pretende apagar (ou seja, está na pasta principal).
  4. Mantenha premido o botão Shift.
  5. Clique no botão “Delete”, no seu teclado ou na barra de ferramentas do 7zip File Manager; ** Certifique-se de que ainda mantém premida a tecla Shift**.
  6. Clique no botão “OK”; confirme que ainda tem a tecla Shift premida*.
12
12
12
2016-09-09 10:52:17 +0000

Há duas coisas que ainda não foram mencionadas nas respostas existentes.

  1. É possível utilizar o prefixo “extended length path” para aceder a percursos longos
  2. Com o Windows 10, pode activar o suporte a caminhos longos para uso geral - note, no entanto, que nem todas as aplicações funcionarão com caminhos longos, deve testar software mais antigo. Apenas software com uma entrada de manifesto apropriada poderá fazer uso disto.

Long Path Prefix

A API do Windows tem uma função especial que suporta nomes de caminhos Unicode com até 32k caracteres (cada elemento com até 255 caracteres de comprimento).

O prefixo usado para dizer à API para usar caminhos Unicode longos é `\?Há duas coisas que ainda não foram mencionadas nas respostas existentes.

  1. É possível utilizar o prefixo “extended length path” para aceder a percursos longos
  2. Com o Windows 10, pode activar o suporte a caminhos longos para uso geral - note, no entanto, que nem todas as aplicações funcionarão com caminhos longos, deve testar software mais antigo. Apenas software com uma entrada de manifesto apropriada poderá fazer uso disto.

Long Path Prefix

A API do Windows tem uma função especial que suporta nomes de caminhos Unicode com até 32k caracteres (cada elemento com até 255 caracteres de comprimento).

O prefixo usado para dizer à API para usar caminhos Unicode longos é como em:

\?\D:\very long path

Nomes UNC são normalmente usados quando se refere a caminhos em servidores remotos no formulário \servername\path name\file name. Pode combinar isto com o prefixo de caminho longo assim: \?\UNC\server\share

Note que algumas aplicações, mal escritas mas infelizmente bastante comuns, não suportam caminhos de ficheiros UNC nem o prefixo de caminho longo.

Referência: https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath

Suporte a caminhos longos

Esta é uma opção que foi adicionada às versões recentes do Windows 10. Não é, no momento da escrita, ativada por padrão, uma vez que requer suporte a aplicações específicas. Curiosamente, o PowerShell tem suporte integrado, pelo que activar esta opção permitirá que caminhos longos sejam usados directamente nos scripts PowerShell.

Pode activá-lo através do editor de Políticas de Grupo se tiver uma versão do Windows com isso. Ou pode simplesmente utilizar a seguinte alteração de Registo. Como sempre, por favor faça uma cópia de segurança da secção do registo que está a alterar antes de fazer qualquer alteração.

  1. Execute regedit.exe.
  2. Confirme o aviso UAC.
  3. Navegue até à chave: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
  4. Criar ou alterar a chave LongPathsEnabled.
  5. Se não existir, clique com o botão direito do rato em Políticas e seleccione Novo Valor da Palavra (32 bits) no menu.
  6. Defina LongPathsEnabled para 1 para activar.

Quaisquer aplicações com entradas de manifesto adequadas terão agora acesso aos caminhos longos padrão POSIX. Isto deve incluir aplicações Windows Store.

Referência: https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/

UPDATE 2017-04-09

@maoizm apontou um problema com a chave de registo acima, por isso fiz mais algumas pesquisas . Parece que agora pode definir um suporte a nomes de ficheiros longos com uma chave de sistema:

HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)

Isto ainda só funciona para aplicações que estão especificamente definidas para o utilizar (requer uma entrada no manifesto da aplicação.xml).

Também deve ter em atenção que não pode utilizar nomes de caminhos relativos com este método.

8
8
8
2014-10-28 05:52:15 +0000

Eu gosto da solução cmd. Embora eu queira partilhar outra solução que até funciona no Explorer: tente encurtar os nomes das pastas-mãe antes de apagar: nomes mais curtos encurtam o caminho. Digamos que você tem esta estrutura em árvore da pasta:

C:\

… Projetos

… … Alguns projectos fantásticos durante a Primavera de 2014

… … … Alguma actividade no parque da cidade numa sexta-feira

… … … Bla bla bla bla bla bla bla bla bla bla bla

… … … … Ficheiros reais com nomes longos, também

Neste caso não é possível apagar as pastas, também não é possível apagar ou dar um novo nome aos ficheiros. Se quiser remover toda a estrutura de pastas ou parte dela, pode renomear temporariamente as pastas-mãe e encurtar o caminho, e depois remover a pasta. Os nomes podem ser apenas letras:

C:\

… Projectos

… … x

… … y

… … … z

… … … … Ficheiros reais com nomes longos, também

No meu caso só queria remover a pasta inteira com muitas subpastas e ficheiros. Por isso não quis saber dos nomes das pastas.

7
7
7
2016-01-11 14:22:54 +0000

A solução 7-zip funciona muito bem. Outra opção se tiver o git instalado é abrir uma shell bash e usar:

rm -f

(ou rm -rf para pastas)

4
4
4
2014-04-29 15:47:23 +0000

Sugiro Comandante Total (shareware, mas continua a trabalhar após o período experimental com apenas um ecrã de início de trabalho mínimo). É assim que eu sempre resolvo as questões de ao longo nome de arquivo*.

2
2
2
2015-02-08 21:07:55 +0000

Eu criei um programa java simples que usa robocopy para apagar os arquivos. O jarro é executável. Para saída adicional execute-o a partir da linha cmd. https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing

2
2
2
2010-11-06 16:24:27 +0000

Pode também apagá-los utilizando o seu nome abreviado equivalente. dir /x irá mostrar-lhos.

1
1
1
2013-12-20 06:10:00 +0000

Já tentei todas as outras respostas, mas não funcionaram (pelo menos para mim).

Encontrei delinfile e funcionou bastante bem e muito rapidamente!

O seu julgamento é limitado a 3 acções / 15 Dias, mas é utilizável se quiser apenas apagar algumas pastas/ficheiros:

1
1
1
2017-10-28 00:35:26 +0000

Tenho aqui a resposta perfeita (para ficheiros). Funciona em Windows 10.

REM Make sure there is no \ at the end of either path!
robocopy "C:\...\...\...\long\path" "C:\DeleteMe" "FileName" /MOV
REM Note: this ^ can be called many times before...:

REM Finally, recursively delete the higher up DeleteMe directory.
rmdir /S /Q DeleteMe

Veja também: https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath

Nem uma única resposta alternativa em 4 perguntas foi suficiente para as minhas necessidades. De nada.

1
1
1
2017-01-09 12:08:22 +0000

Directórios Maiores foi concebido para esta tarefa também.

  • Download
  • Utiliza uma chamada recursiva com RemoveDirectoryW para apagar directórios existentes
  • Utiliza o próprio repositório de ficheiros para directórios recentemente criados
  • Os ficheiros podem ser movidos dos directórios antes da eliminação dos directórios de contacto.
  • Speedy, embora navegar para o topo do directório seja um clique por directório aninhado
  • Windows XP(SP3) e up
  • Código não-gerido não assinado sem instalador, por isso possível aviso Smartscreen quando executado a partir de uma pasta de reserva, por exemplo, desktop.

Mais informações em CodeProject .

1
1
1
2017-06-13 07:52:13 +0000

Enfrentei este problema no Windows 10 e encontrei esta solução fácil.

  1. Vá para um pouco mais fundo da sua árvore de pastas.
  2. Arraste e largue uma pasta de algum lugar do meio da árvore para algum lugar do início da árvore usando a barra de endereços.
  3. Como na minha imagem, arraste e largue a caixa vermelha para a caixa verde. (neste caso o caminho é mais curto, mas para caminhos longos também funciona)
  4. Depois o seu caminho torna-se mais curto e apaga como habitualmente utilizando a tecla Delete.

0
0
0
2015-06-25 16:47:36 +0000

Finalmente descobri como fazer isto através do Powershell. Aqui estão as instruções que segui para fazer isto funcionar no Windows 7:

  1. Crie uma nova pasta chamada NTFSSecurity* na pasta C:\Users\XXXX\Documents\WindowsPowerShell\Modules\NTFSSecurity, onde XXXX* é o seu nome de utilizador Windows. Exemplo: se o meu nome de utilizador fosse “aspnyc”, a nova pasta seria C:\Users\aspnyc\Documents\WindowsPowerShell\Modules\NTFSSecurity .

  2. Faça o download do pacote File System Security PowerShell Module - deverá estar disponível como um simples ficheiro ZIP.

  3. Abra uma consola Powershell, corra Get-Module -ListAvailable* e certifique-se de que NTFSSecurity* aparece algures na lista de módulos registados.

  4. Na consola Powershell, corra Import-Module NTFSSecurity.

  5. na consola Powershell, corra Remove-Item2 “YYYY” -Recurse , onde YYYY* é o caminho do Windows para a pasta que pretende apagar recursivamente (por exemplo C:\Potatoes\Badgers\FolderToDelete ).

0
0
0
2015-10-09 16:08:22 +0000

Finalmente descobri como fazer isto com Powershell no Windows 10, onde os nomes dos ficheiros individuais eram demasiado longos. Aqui estão os passos que segui para que isto funcionasse no Windows 10:

  1. Faça o download do pacote File System Security PowerShell Module - deverá estar disponível como um simples ficheiro ZIP.
  2. Extraia o ficheiro Zip como uma pasta NTFSSecurity no directório C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules.
  3. Abra uma consola Powershell com a elevação administrativa (a.k.a. Admin Mode) e execute Get-Module -ListAvailable* e certifique-se de que NTFSSecurity aparece algures na lista de módulos registados.
  4. Executar Set-ExecutionPolicy Unrestricted* para contornar o modo de execução assinado. Tem de confirmar esta acção com um Y(es)
  5. Eventualmente cd para a pasta que pretende apagar.
  6. Na consola Powershell, corra Import-Module NTFSSecurity.
  7. Na consola Powershell, corra Remove-Item2 “YYYY” -Recurse , onde YYYY* é o caminho relativo ou absoluto do Windows para a pasta que pretende apagar recursivamente (por exemplo C:\Potatoes\Badgers\FolderToDelete ).
  8. Verifique se funcionou.
  9. Eventualmente voltar ao modo de execução assinado com Set-ExecutionPolicy Restricted*. Tem de confirmar esta acção com Y(es).
0
0
0
2019-07-16 21:25:40 +0000

Navegue até ao directório em WinRAR, seleccione o ficheiro, prima F2, renomeie o ficheiro para um nome mais curto. Depois pode apagar o ficheiro como de costume.

Fonte: https://www.youtube.com/watch?v=qQTyTprFAOg

0
0
0
2017-07-05 10:44:55 +0000

Se tiver o Bash no Ubuntu no Windows instalado, pode cd para o directório principal num prompt de comando normal e depois digitar:

bash -c "rm -rf dirname_here"

que lança o bash, apaga recursivamente o directório do linux onde não existem restrições de nomes de ficheiros e depois sai de volta para o prompt de comando normal.