Acredito que encontrei uma maneira de excluir coisas de cmd
. Originalmente eu tentei o comando del
, mas isso não funcionou. Então me lembrei de rmdir
. Fazendo o seguinte:
rmdir /S /Q <dir>
parece ter funcionado.
O Windows parece ter um limite de tamanho em nomes de arquivos ao tentar excluir, embora não impeça a criação desses arquivos.
Nosso processo de criação cria vários arquivos temporários (muitos de um WSDL) que são afetados por 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 workarea (onde todos os arquivos temporários vão) sem realmente fazer uma limpeza completa do formiga.
Estes são os mesmos erros essa questão , mas as respostas não funcionam para mim, já que estou lidando com um diretório, não com 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 de Remove-Item
no PowerShell apresenta 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 de maneiras fáceis de contornar esse erro de exclusão sem ter que encontrar manualmente os arquivos com problemas e movê-los / renomeá-los?
Use o Gerenciador de arquivos 7-Zip para excluí-los.
Se você ainda estiver tendo problemas, certifique-se de utilizar Shift + Excluir dentro do Gerenciador de Arquivos 7-Zip. Caso contrário, o Windows tentará movê-los para a Lixeira (que falhará novamente).
Nenhuma das outras respostas (gratuitas) aqui funcionou para mim, mas encontrei uma em outro site:
rimraf <dir>
rimraf é um Node.js pacote, então você precisará instalar o Node.js, que inclui npm . Então você pode correr:
npm install -g rimraf
Então você pode executar rimraf
na linha de comando.
Eu encontrei esta solução porque o próprio npm estava causando esse problema devido à forma como ele aninha as dependências.
A propósito, rimraf
recebe o nome do comando rm -rf
do UNIX, que exclui recursivamente arquivos e pastas.
Não é necessário instalar nenhum programa para resolver este problema.
Esse problema é facilmente resolvido usando robocopy
, pré-instalado desde o Windows Vista, lançado em 2006.
Por exemplo, rmdir /S /Q <dir>
foi reportado como 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 tê-lo instalado. Então, vamos nos concentrar em robocopy
A ideia é
robocopy
para copiar + atualizado Depois de executar robocopy
, o diretório de destino também estará vazio.
Estas instruções são para a linha de comando. Basta abrir a pesquisa no Windows, digite cmd
e pressione Enter.
Digamos que o destino para exclusão seja:
C:\delete\this folder\with a very long name
Procederemos da seguinte forma:
Primeiro crie um diretório vazio, f.i. C:\emptyfolder
.
mkdir C:\emptyfolder
Copie + atualize do diretório vazio para o destino, usando a opção /purge
robocopy c:\emptyfolder "C:\delete\this folder\with a very long name" /purge
Exclua o diretório vazio. Você não precisa mais disso.
rmdir c:\emptyfolder
Como não há arquivos ou pastas no diretório de origem ( C:\emptyfolder
), ele simplesmente exclui os arquivos e pastas no diretório de destino ( C:\delete\this folder\with a very long name
) recursivamente!
Truque final: você pode evitar escrever à mão
C:\delete\this folder\with a very long name
Arrastando a pasta de uma janela do Explorer e soltando na janela Terminal / cmd.
Cuidado : Os arquivos excluídos não irão para a pasta da lixeira! Uma vez apagados, os arquivos não podem ser recuperados.
(Extraído de " Caminho muito longo? Use Robocopy "por BVLANGEN )
PS: Eu percebo que essa resposta estava aqui, menos didaticamente. Como excluir um arquivo no Windows com um nome de arquivo muito longo? [duplicado]
Benoit adicionado:
You may need to go through this process more than once to get rid of all of the files.
A ferramenta que usei quando tive esse problema foi FastCopy . Selecionei Excluir tudo no menu suspenso, selecionei o diretório que queria 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.
O rm -rf
do Cygwin funciona bem em caminhos longos!
Sem instalar software adicional, você pode usar o comando subst
para criar temporariamente um alias para um longo diretório nomeado.
por exemplo. Se você quiser apagar a pasta C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted
você pode usar o comando
subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"
e, em seguida, você pode excluir X:\folder to be deleted
no Windows Explorer ou no prompt de comando com facilidade. Para remover o alias da letra da unidade temporária, use o comando
subst x: /d
Basta deixar o Powershell no comando executando abaixo:
Cmd /C "rmdir /S /Q <dir>"
A solução da Dentrasi é o que funcionou melhor para mim, mas eu queria postar as etapas específicas em uma resposta de nível superior .
Existem duas coisas que não foram mencionadas nas respostas existentes.
A API do Windows tem uma função especial que suporta nomes de caminho Unicode com até 32k caracteres (cada elemento com até 255 caracteres de comprimento).
Isso é muitas vezes erroneamente chamado de nomenclatura UNC, mas não está relacionado.
O prefixo usado para dizer à API para usar caminhos longos de Unicode é \?\
como em:
\?\D:\very long path
Os nomes UNC são normalmente usados ao se referir a caminhos em servidores remotos no formulário \servername\path name\file name
. Você pode combinar isso com o prefixo de caminho longo, então: \?\UNC\server\share
Observe que alguns aplicativos, mal escritos, mas infelizmente muito comuns, não suportam caminhos de arquivos UNC nem o prefixo de caminho longo.
Referência: link
Esta é uma opção que foi adicionada às versões recentes do Windows 10. Não é, no momento da escrita, ativada por padrão, já que requer suporte específico a aplicativos. Curiosamente, o PowerShell tem suporte embutido, portanto, ativar essa opção permitirá que caminhos longos sejam usados diretamente em scripts do PowerShell.
Você pode ativá-lo através do editor de Diretiva de Grupo se tiver uma versão do Windows com isso. Ou você pode simplesmente usar a seguinte alteração do Registro. Como sempre, faça o 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
para 1
para ativar. Quaisquer aplicações com entradas de manifesto apropriadas terão agora acesso a caminhos longos padrão POSIX. Isso deve incluir aplicativos da Windows Store.
Referência: link
ATUALIZAÇÃO 2017-04-09
@maoizm apontou um problema com a chave de registro acima, então explodi . Parece que agora você pode definir suporte a nomes extensos de arquivos com uma chave do sistema:
HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)
Isso ainda funciona apenas para aplicativos especificamente definidos para usá-lo (requer uma entrada no manifest.xml do aplicativo).
Você também deve observar que não é possível usar nomes de caminho relativos com esse método.
Eu gosto da solução cmd. Embora eu queira compartilhar outra solução alternativa que funciona até mesmo no Explorer: tente encurtar os nomes das pastas pai antes da exclusão: nomes mais curtos encurtarão o caminho. Diga, você tem essa estrutura em árvore da pasta:
C: \
.. Projetos
.. .. Algum projeto incrível durante a primavera de 2014
.. .. .. Alguma atividade no parque da cidade na sexta-feira
.. .. .. .. Bla bla bla bla bla bla bla bla bla bla bla bla
.. .. .. .. .. arquivos reais com nomes longos também
Neste caso, você não pode excluir as pastas, você não pode excluir ou renomear os arquivos também. Se você quiser remover toda a estrutura de pastas ou parte dela, poderá renomear temporariamente as pastas pai e encurtar o caminho e, em seguida, 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 não me importei com os nomes das pastas.
A solução 7-zip funciona bem. Outra opção se você tiver o git instalado é abrir um shell bash e usar:
rm -f
(ou rm -rf
para pastas)
Eu sugiro Total Commander (shareware, mas continua trabalhando após o período de teste com apenas uma tela inicial mínima). Essa é a maneira que eu sempre resolvo os problemas do nome de arquivo longo demais .
Você também pode excluí-los usando o nome abreviado equivalente. dir /x
mostrará a você.
Eu criei um programa java simples que usa o robocopy para excluir os arquivos. O jarro é um runnable. Para saída adicional, execute a partir da linha cmd.
Eu tentei todas as outras respostas, mas elas não funcionaram (pelo menos para mim).
Medepareicom
O teste está limitado a 3 ações / 15 dias, mas pode ser usado se você quiser excluir apenas algumas pastas / arquivos:
Diretórios Maiores foi desenvolvido para essa tarefa também.
Mais informações em CodeProject .
Eu enfrentei esse problema no Windows 10 e achei essa solução fácil.
Obtive a resposta perfeita aqui (para arquivos). Funciona no 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: link
Nenhuma resposta alternativa em 4 perguntas foi suficiente para minhas necessidades. Você é bem vindo mundo.
Eu finalmente descobri como fazer isso via Powershell. Aqui estão as instruções que segui para fazer isso funcionar no Windows 7:
Crie uma nova pasta chamada NTFSSecurity na pasta C: \ Usuários \ XXXX \ Documents \ WindowsPowerShell \ Módulos \ NTFSSecurity , onde XXXX é o seu nome de usuário do Windows. Exemplo: se meu nome de usuário for " aspnyc ", a nova pasta será C: \ Usuários \ aspnyc \ Documents \ WindowsPowerShell \ Módulos \ NTFSSecurity .
Faça o download do pacote do módulo PowerShell do sistema de arquivos - ele deve estar disponível como um arquivo ZIP simples.
Eu finalmente descobri como fazer isso com o Powershell no Windows 10, onde os nomes de arquivos individuais eram muito longos. Aqui estão os passos que segui para que isso funcione no Windows 10:
Se você tiver o Bash no Ubuntu no Windows instalado, você pode criar um cd para o diretório pai em um prompt de comando regular e digitar:
bash -c "rm -rf dirname_here"
Que lança o bash, exclui recursivamente o diretório do linux, onde não há restrições de nome de arquivo, e então sai de volta ao seu prompt de comando regular.
Tags windows file-management