O Windows parece ter um limite de tamanho para os nomes de arquivos ao tentar excluir, embora não impeça a criação desses arquivos.
Nosso processo de compilação cria vários arquivos temporários (muitos criados a partir de um WSDL) que atingem esse limite. Nosso script ant é de alguma forma capaz de excluí-los ao fazer uma limpeza, mas às vezes eu preciso excluir o diretório da área de trabalho (para onde estão todos os arquivos temporários) sem realmente fazer uma limpeza completa do ant.
São os mesmos erros desta pergunta , mas as respostas não funcionam realmente para mim, pois estou lidando com um diretório, não um arquivo, e nem sempre sei quais arquivos ou subdiretórios específicos estão causando o problema. E estou tentando evitar qualquer processo manual (além de acionar um único comando) para realmente excluí-los.
Se eu tentar excluir o diretó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
A tentativa Remove-Item
no PowerShell fornece 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 conhece alguma ferramenta ou maneira fácil de contornar esse erro de exclusão sem precisar localizar manualmente os arquivos com problemas e movê-los / renomeá-los?
fonte
Ubuntu
ou qualquer outroLinux Bootable CD
, podemos inicializar nosso computadorUbuntu
ou qualquer outro sistema operacional temporariamente. Em seguida, podemos selecionar a pasta e excluí-la facilmente.Respostas:
Use o 7-Zip File Manager para excluí-los.
Se você ainda estiver com problemas, utilize o Shift+ Deletedentro do 7-Zip File Manager. Caso contrário, o Windows tenta movê-los para a Lixeira (que falhará novamente).
fonte
shift + Del
como o @cori disse. Se você selecionar aDelete
opção no menu de contexto, ela falhará lá.shift + Del
isto!Nenhuma das outras respostas (gratuitas) aqui funcionou para mim, mas eu encontrei uma em outro site:
rimraf é um Node.js pacote, então você vai precisar instalar Node.js que inclui npm . Então você pode executar:
Então você pode executar a
rimraf
partir da linha de comando.Encontrei esta solução porque o próprio npm estava causando esse problema devido à maneira como aninha dependências.
A propósito,
rimraf
recebe o nome do comando UNIXrm -rf
, que exclui recursivamente arquivos e pastas.fonte
Não é necessário instalar nenhum programa para resolver esse problema.
Esse problema é facilmente resolvido usando
robocopy
, pré-instalado desde o Windows Vista, lançado em 2006.Por exemplo,
rmdir /S /Q <dir>
foi relatado falha em alguns casos. Não há necessidade de usar o 7zip ou qualquer outra ferramenta de terceiros. Powershell é um exagero. O Cygwin pode funcionar, mas você pode não o ter instalado. Então, vamos nos concentrar emrobocopy
A ideia é
robocopy
para copiar + atualizadoApós a execução
robocopy
, o diretório de destino também estaria vazio.Essas instruções são para a linha de comando. Basta abrir a pesquisa no Windows, digite
cmd
e pressione Enter.Digamos que o alvo para exclusão seja:
Nós procedemos da seguinte forma:
Primeiro, crie um diretório vazio, fi
C:\emptyfolder
.Copie + atualize do diretório vazio para o destino, usando a opção
/purge
Exclua o diretório vazio. Você não precisa mais disso.
Como não há arquivos ou pastas no diretório de origem (
C:\emptyfolder
), ele simplesmente exclui os arquivos e pastas do diretório de destino (C:\delete\this folder\with a very long name
) recursivamente!Truque final: você pode evitar escrever à mão
Ao arrastar a pasta de uma janela do Explorer e soltar na janela Terminal / cmd.
Cuidado : os arquivos excluídos não irão para a pasta Lixeira ! Uma vez excluídos, os arquivos não podem ser recuperados.
(Retirado de "Caminho por muito tempo? Use Robocopy" por BVLANGEN )
PS: Eu sei que essa resposta estava aqui, menos didaticamente. Como excluir um arquivo no Windows com um nome de arquivo muito longo? [duplicado]
Benoit acrescentou:
fonte
Acredito que encontrei uma maneira de excluir as coisas
cmd
. Originalmente, eu tentei odel
comando, mas isso não funcionou. Então eu lembreirmdir
. Fazendo o seguinte:parece ter funcionado.
fonte
A ferramenta que eu usei quando tive esse problema foi o FastCopy . Selecionei Excluir tudo no menu suspenso, selecione o diretório que deseja excluir e cliquei em Excluir tudo .
O FastCopy é portátil (não requer instalação) e há versões de 32 e 64 bits disponíveis.
fonte
Sem instalar software adicional, você pode usar o
subst
comando para criar temporariamente um alias para um diretório nomeado longo.Por exemplo, se você deseja excluir a pasta,
C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted
pode usar o comandoe você pode excluir
X:\folder to be deleted
no Windows Explorer ou no prompt de comando facilmente. Para remover o alias da letra da unidade temporária, use o comandofonte
O Cygwin's
rm -rf
funciona bem em caminhos longos!fonte
Basta soltar do Powershell no comando executando abaixo:
fonte
A solução da Dentrasi foi a que funcionou melhor para mim, mas eu queria postar as etapas específicas em uma resposta de nível superior.
fonte
Há duas coisas ainda não mencionadas nas respostas existentes.
Prefixo do caminho longo
A API do Windows possui uma função especial que oferece suporte a nomes de caminhos Unicode com até 32k caracteres (cada elemento com até 255 caracteres).
Isso geralmente é chamado de nomeação UNC por engano, mas não é, porém, relacionado.
O prefixo usado para dizer à API para usar caminhos Unicode longos é o seguinte
\\?\
:Os nomes UNC são normalmente usados quando se refere a caminhos em servidores remotos no formulário
\\servername\path name\file name
. Você pode combinar isso com o prefixo do caminho longo, para:\\?\UNC\server\share
Observe que alguns aplicativos mal escritos, mas infelizmente bastante comuns, não suportam caminhos de arquivo UNC nem o prefixo do caminho longo.
Referência: https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
Suporte de caminho longo
Esta é uma opção que foi adicionada às versões recentes do Windows 10. Não é, no momento da redação, ativada por padrão, pois requer suporte de aplicativo específico. Curiosamente, o PowerShell possui suporte interno, portanto, habilitar essa opção permitirá que caminhos longos sejam usados diretamente nos scripts do PowerShell.
Você pode ativá-lo através do editor de Diretiva de Grupo, se você tiver uma versão do Windows. Ou você pode simplesmente usar a seguinte alteração no Registro. Como sempre, faça backup da seção do registro que você está alterando antes de fazer qualquer coisa.
regedit.exe
.HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
LongPathsEnabled
.LongPathsEnabled
para1
ativar.Todos os aplicativos com entradas apropriadas de manifesto agora terão acesso aos caminhos longos padrão do POSIX. Isso deve incluir aplicativos da 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 do registro acima, então fiz mais algumas investigações . Parece que agora você pode definir o suporte a nomes de arquivos longos com uma chave do sistema:
No entanto, isso ainda funciona apenas para aplicativos especificamente configurados para usá-lo (requer uma entrada no manifest.xml do aplicativo).
Você também deve observar que não pode usar nomes de caminhos relativos com esse método.
fonte
{48981759-12F2-42A6-A048-028B3973495F}Machine
parte do caminho do registro será diferente em cada computador - pode não ser óbvio para todosEu gosto da solução cmd. Embora eu queira compartilhar outra solução alternativa que funcione apenas no Explorer: tente reduzir os nomes das pastas pai antes da exclusão: nomes mais curtos diminuirão o caminho. Digamos que você tenha esta estrutura em árvore da pasta:
C: \
.. Projetos
.. .. Algum projeto impressionante durante a primavera de 2014
.. .. .. alguma atividade no parque da cidade uma sexta-feira
.. .. .. .. Blá blá blá blá blá blá blá blá blá blá blá
Arquivos reais com nomes longos também
Nesse caso, você não pode excluir as pastas, também não pode excluir ou renomear os arquivos. Se você deseja remover toda a estrutura de pastas ou parte dela, é possível renomear temporariamente as pastas pai, reduzir o caminho e remover a pasta. Os nomes podem ser apenas letras:
C: \
.. Projetos
.. .. x
.. .. y
.. .. .. .. z
Arquivos reais com nomes longos também
No meu caso, eu só queria remover a pasta inteira com muitas subpastas e arquivos. Então, eu não me importei com os nomes das pastas.
fonte
A solução 7-zip funciona muito bem. Outra opção se você tiver o git instalado é abrir um shell bash e usar:
rm -f
(ou
rm -rf
para pastas)fonte
Git Bash Here
Eu sugiro o Total Commander (shareware, mas continua trabalhando após o período de teste com apenas uma tela inicial mínima). É assim que eu sempre resolvo problemas de nome de arquivo muito longos .
fonte
chkdsk
deve resolvê-lo.Você também pode excluí-los usando o nome abreviado equivalente.
dir /x
irá mostrar-lhes.fonte
Eu criei um programa java simples que usa robocopy para excluir os arquivos. O jar é um executável. Para saída adicional, execute-o na linha cmd.
https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing
fonte
Eu tentei todas as outras respostas, mas elas não funcionaram (pelo menos para mim).
Me deparei com delinfile e funcionou muito bem e muito rapidamente!
O teste é limitado a 3 ações / 15 dias, mas é utilizável se você quiser excluir apenas algumas pastas / arquivos:
fonte
Diretórios maiores também foram projetados para esta tarefa.
Mais informações em CodeProject .
fonte
Eu enfrentei esse problema no Windows 10 e encontrei esta solução fácil.
fonte
Aqui está a resposta perfeita (para arquivos). Funciona no Windows 10.
Consulte também: https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath
Nenhuma resposta alternativa única em 4 perguntas foi suficiente para minhas necessidades. De nada, mundo.
fonte
Finalmente descobri como fazer isso via Powershell. Aqui estão as instruções que eu segui para que isso funcionasse no Windows 7:
Crie uma nova pasta chamada NTFSSecurity na pasta C: \ Users \ XXXX \ Documents \ WindowsPowerShell \ Modules \ NTFSSecurity , em que XXXX é o seu nome de usuário do Windows. Exemplo: se meu nome de usuário fosse " aspnyc ", a nova pasta seria C: \ Users \ aspnyc \ Documents \ WindowsPowerShell \ Modules \ NTFSSecurity .
Faça o download do pacote do módulo PowerShell de segurança do sistema de arquivos - ele deve estar disponível como um arquivo ZIP simples.
fonte
Finalmente descobri como fazer isso com o Powershell no Windows 10, onde os nomes de arquivos individuais eram muito longos. Aqui estão as etapas que segui para que isso funcionasse no Windows 10:
fonte
Se você tiver o Bash no Ubuntu no Windows instalado, poderá fazer o cd no diretório pai em um prompt de comando regular e digitar:
Que inicia o bash, exclui recursivamente o diretório do linux, onde não há restrições de nome de arquivo, e volta ao seu prompt de comando comum.
fonte
Navegue até o diretório no WinRAR, selecione o arquivo, pressione F2, renomeie o arquivo para um nome mais curto. Em seguida, você pode excluir o arquivo como de costume.
Fonte: https://www.youtube.com/watch?v=qQTyTprFAOg
fonte