Forçar a exclusão de arquivos com um nome bastante grande


62

Uso regularmente o Node.js para gerenciar dependências de programas que escrevo, não é grande coisa. Hoje acabei com uma estrutura de pastas assim:insira a descrição da imagem aqui

A tentativa de excluir qualquer arquivo foi recebida com este erro:

Os nomes dos arquivos de origem são maiores do que os suportados pelo sistema de arquivos. Tente mudar para um local com um nome de caminho mais curto ou renomeie para nomes mais curtos antes de tentar esta operação.

Já estava em C: \, então não ia ficar muito mais curto.



você tem alguma idéia de como sua estrutura de pastas ficou tão grande que me deparei com a mesma situação ao instalar o grunhido.
eran otzer

11
@eranotzer usando npm.
Seiyria

Eu não fiz as dependências em seus packages.json onde escritas incorretamente?
eran otzer

@eranotzer Sim. Por causa de como o npm @ 2 funcionava, todas as dependências aninhavam suas dependências dentro dele. Isso significava que as cadeias de dependência poderiam ser arbitrariamente longas. O npm @ 3 está olhando para ajustar esse comportamento.
Seiyria

Respostas:


75

Use a ferramenta Microsoft robocopy.exe.

  1. Crie uma nova pasta vazia, por exemplo c:\empty
  2. Em seguida, copie a pasta vazia na pasta que contém os nomes de arquivos longos que você está tentando excluir, por exemplo c:\myannoyingfolder. Faça o seguinte no prompt de comando:

    robocopy / MIR c: \ vazio c: \ myannoyingfolder


Como isso faz parte do meu fluxo de trabalho com bastante frequência, descobri como integrá-lo ao shell do Windows. Veja minha resposta abaixo. :)
toddmo

Nota: este comando pode levar alguns segundos ou até minutos para terminar. Então, não se preocupe e deixá-lo fazer o :-) mágica
Adil Malik

Obrigado, trabalhou para mim. Eu tinha que ter certeza de que também matei qualquer processo (IIS) que ainda estava segurando um dos arquivos.
Slick Shinobi:

Sempre que tento abrir o robocopy.exe, uma janela pisca por um segundo e nada acontece. Por favor ajude
Maulik Modi

29

ok, digamos que você queira excluir uma árvore D:\very\long\path, não precisa necessariamente usar nenhuma ferramenta como o Robocopy.

  1. Vá para o diretório raiz da unidade que contém o diretório que você não pode excluir
  2. Crie um diretório com um único nome de letra, por exemplo D:\a
  3. Navegue para dentro do diretório que você deseja excluir, neste caso D:\very\long\path
  4. Selecionar tudo ( Ctrl+ A) e Cortar ( Ctrl- X)
  5. Navegue até a pasta que você acabou de criar
  6. Colar ( Ctrl- V)
  7. Agora, vá para o diretório raiz e exclua a pasta temp, nesse caso D:\a
  8. Em seguida, volte e exclua o diretório original

2
Isso não funcionou para mim na primeira tentativa para mim. No entanto, depois de repetir esse procedimento, mais alguns níveis de pasta consegui excluir tudo.
abaldwin99

11
Ótima solução, funcionou perfeitamente. Simples e eficaz, obrigado!
Caner Öncü

ÓTIMO!! Funciona como um encanto!!! nenhuma outra ferramenta é necessária. Obrigado!
Prasanth KC

Isso funciona muito bem, e eu acrescentaria um ponto a isso: se a seleção de arquivos do caminho não funcionar, você pode selecionar uma pasta em algum lugar no meio do caminho longo e movê-la para uma pasta temporária e excluir ambos de maneira semelhante.
Narayana Nagireddi

4

Comecei a digitar esse problema ao tentar vários comandos, incluindo del /Fe rmdir /S(além de manter a tecla Shift pressionada ao excluir para tentar ignorar a lixeira). Eu acho que, rmdir /Sna verdade, excluí todos os arquivos, então pude prosseguir com a exclusão das pastas que eram nós de folhas e, em seguida, progredindo na árvore alguns nós de cada vez. Eventualmente, eu limpei todos eles, mas isso era ridículo.


4

Você pode integrar essa funcionalidade ao shell do Windows. Meu aprimoramento na resposta de Flo foi muito longo para um comentário.

Eu adicionei um Deletecomando ao menu de contexto do Windows.

insira a descrição da imagem aqui

O delete.regarquivo adiciona entradas do Registro para associar pastas ao robodelete.batarquivo em lotes.

delete.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Delete]

[HKEY_CLASSES_ROOT\Directory\shell\Delete\command]
"Extended"=""
@="\"D:\\Documents\\robodelete.bat\" \"%1\""

robodelete.bat

mkdir c:\empty
robocopy /MIR c:\empty %1
rmdir %1
rmdir c:\empty

Nota : Pode ser necessário alterar os caminhos nos dois arquivos conforme suas preferências.

AVISO : Não há como desfazer este comando. Ele não usa a lixeira e não pede que Y / N confirme antes de destruir a pasta para sempre!


Obrigado pelo aviso. Também preciso disso no meu fluxo de trabalho, mas gostaria de evitar um botão nuclear no menu do botão direito que não possui confirmação de S / N. Se eu tiver tempo, tentarei fazer esse ajuste e sugiro uma edição.
abaldwin99

11
@ abaldwin99, como este, talvez stackoverflow.com/a/1807318/1045881
toddmo 28/09/15

4

A ferramenta de linha de comando de código aberto SuperDelete ( GitHub ) funcionou para mim depois que outras opções falharam (Windows 10).



0

Em muitos casos, o CD no diretório a partir de um prompt de comando e o uso do DEL funcionarão.

Caso contrário, você deve trabalhar seu nome na árvore de diretórios: renomeie a pasta de nível mais baixo para um nome mais curto (por exemplo, "a"), depois o próximo nome de pasta mais alto e assim por diante, até que o caminho total seja curto o suficiente. Ao trabalhar de baixo para cima, você sempre manipula nomes com um caminho completo mais curto que os arquivos finais.


0
  • Abrir prompt de comando administrativo
  • net use z: c:\path
  • del z:\*.*

Ajustar de acordo. Z: é apenas uma letra de unidade arbitrária para a qual mapear o caminho incorreto. Esse último comando de exclusão apagará o diretório INTEIRO que você mapeou - portanto, seja mais específico conforme necessário.


2
Isso é muito perigoso para usuários não-avançados! Existe o potencial de limpar uma unidade se isso for feito errado.
Rudi Strydom

Concordo 100%. Definitivamente, prossiga com cautela neste.
Bradley Forney

0

A melhor maneira é ter o Linux inicializável no pendrive e excluir arquivos sem problemas nos sistemas operacionais de CD ao vivo .


-1

Eu também tive o mesmo problema, e eu mesmo o encontrei, simplesmente renomeie a pasta pai o menos possível. Ex. Se a nossa pasta na unidade " D " for como D: // Folder / Undelete_Folder . Apenas uma coisa que você precisa fazer é renomear o nome da pasta pai tão pequeno quanto você pode renomeá-la " a ". sua localização será D: // a / Undelete_folde r. e exclua a pasta pai.


Não apenas isso não necessariamente funciona (e se ainda for maior, mesmo com a redução?), Mas mencionei explicitamente que minha pasta estava na raiz da unidade.
Seiyria

-2

Se todo o resto falhar

Vá para o diretório final na string. Recortar os arquivos Cole novamente no 4º ou 5º arquivo da String. Então [Shift] + [Delete] deve executar o truque.

Fiquei cético ao executar o acima no prompt de comando elevado, pois estava excluindo um arquivo de restauração de teste de um backup do DPM.

espero que isto ajude.


Provavelmente, isso não funcionará porque eles ainda terão esse longo caminho de arquivo para a operação de corte.
Seiyria
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.