Como excluir um arquivo no Windows com um nome de arquivo muito longo? [duplicado]

202

Esta pergunta já tem uma resposta aqui:

Minha esposa tem vários arquivos e pastas que, de alguma forma, acabaram tendo nomes de arquivos que os impediram de serem excluídos (não podem ser excluídos) por meios normais ou pela linha de comando. Acredito que os nomes de arquivos sejam muito longos devido à profundidade das estruturas de pastas. Alguém sabe de um bom utilitário para limpar arquivos como este?

user3048
fonte
Como esses arquivos foram criados?
25411 Nick
Desculpe por minha ignorância sobre este tópico, mas o Windows não deve lidar com esses arquivos? O que Eddins postou não deveria ser feito automaticamente pelo Windows (mesmo no explorer)?
Stefanos Kalantzis
2
@ Mokubai- A pergunta duplicada deve ser marcada como duplicada, pois esta é mais antiga .
AStopher
1
@cybermonkey: E tem uma resposta melhor.
23416 Ellesedil
Para mais leitores, o Método 7zip com CTRL+DELETE é o método mais fácil na minha opinião ...
Christian Gollhardt

Respostas:

426

Quando você deseja excluir completamente um diretório e ele contém caminhos longos, robocopyfaz um trabalho MUITO bom:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

Isso funciona porque a robocopy usa\\?\ internamente as versões compatíveis com Unicode das funções do Win32, com o prefixo dos caminhos do arquivo ; essas funções têm um limite de 2¹⁶-1 (32.767) caracteres em vez de 259.

Pode ser necessário passar por esse processo mais de uma vez para se livrar de todos os arquivos.

Benoit
fonte
1
Eficiente quando não existe um nome abreviado (8.3) armazenado no sistema de arquivos.
Antoine RODRIGUEZ
1
Isso funcionou bem com meus arquivos de cache da Windows Store, que se recusavam a ser excluídos. Obrigado!
Samir
1
Eu tive que adicionar / purga para a linha robocopy para este trabalho, mas fez o truque depois disso
actionshrimp
3
Robocopy é o que me colocou nessa bagunça, mas nunca me ocorreu usar o Robocopy para me livrar dela. Ótima resposta! Obrigado!
Jay Michaud
2
@SarahofGaia, meu mal, é 2¹⁶ - 1 na verdade
Benoit
91

Em um prompt de comando:

dir /X

Isso listará seus arquivos / pastas em formato de nome abreviado. Em seguida, use o nome abreviado exatamente como está escrito para excluir o arquivo:

del LONGF~1.txt
Will Eddins
fonte
1
Eu gosto desse, é um bom pensamento lateral.
Col
Embora eu não possa garantir que funcione nesse caso, eu o usei várias vezes para excluir pastas com caracteres inválidos no final, que os tornam impossíveis de excluir por meios normais.
Will Eddins 23/09/09
1
Isso funciona para arquivos e pastas no diretório atual, mas se você conseguir encontrar-se em uma pasta cujo caminho é muito longo, isso não ajudará. Por exemplo, eu estou atualmente em um console em um muito longo caminho e não pode mesmo dirou cd ...
21411 Bobson
1
@ Bobson Se você não pode dirusar em seu pushdlugar. Isso funcionou para mim.
21913 BadHorsie
4
Isso não funciona com o Windows 10, o nome do arquivo exibido é longo
Loenix 9/17/17
53

Eu progressivamente trabalho meu caminho no caminho, renomeando cada pasta pai sucessiva para "1" e tentando excluir. Você está efetivamente diminuindo o caminho de cada vez e nunca precisei trabalhar em mais de 4 ou 5 diretórios até finalmente poder excluir toda a estrutura de diretórios (que pode ou não ser o que você deseja). Você também pode fazer isso da última pasta filho e trabalhar para cima ou para baixo.

joeqwerty
fonte
7
Essa foi a única coisa que funcionou para mim. Todos os outros truques dados aqui e em outros fóruns como esse não funcionaram.
Andrew Arnott
Foi a única sugestão que funcionou de maneira estranha.
Nestor Ledon
Isso funcionou para mim, um atalho que me ajudou foi mv * 1 && cd 1. Isso não funcionou quando vários arquivos estavam no diretório, mas nesse ponto rm -rf *geralmente era necessário.
Alexander Varwijk
1
Não pode fazer isso no Windows 10 ... renomear lança "filename a erro longa'
Dawesi
3
Isso não apenas corrigiu o problema para mim, mas também explica como acabei com o problema. Eu devo ter um caminho que estava próximo do limite e renomeei uma pasta pai (adicionei algo como "backup Nov 2016 save" ao nome) que empurrou os arquivos em subpastas além do limite. É bom conhecer a causa e a solução, mesmo sabendo que isso também pode acontecer de outras maneiras, acho que essa é uma maneira comum de acontecer com as pessoas.
eselk
13

Em alguns programas, incluindo o Prompt de Comando ( cmd.exe), você pode contornar o limite de tamanho do arquivo, prefixando o caminho completo da \\.\seguinte maneira:

\\. \ C: \ algum diretório \ outro diretório \ um arquivo com nome longo
gravidade
fonte
3
não funciona no windows 10
Dawesi 29/05
graças, cmd trabalhou um charme com isso em Win7rm -rf \\directoryname
Philip Pryde
13

Um truque que usei para contornar a limitação de comprimento "caminho completo e nome do arquivo" para mover, copiar ou excluir algo é encurtá-lo 'invadindo' até a metade (ou mais) usando uma letra de unidade mapeada apontando para uma pasta caminho abaixo .

então você tem c: \ some \ long \ path ... \ e \ foo \ bar \ folders \ oldfiles \ myoldfile.txt.

Em seguida, mapeie uma letra de unidade arbitrária para algum lugar ao longo do caminho, para que o primeiro pedaço do caminho tenha apenas alguns caracteres. Pré-requisito - a pasta deve estar em uma pasta compartilhada (que já pode estar se estiver em um servidor, que é onde eu precisei fazer isso) e, se ainda não estiver, escolha uma pasta em algum lugar no caminho e compartilhe. Dependendo do seu ambiente e nível de paranóia, permita que todos modifiquem o acesso ao compartilhamento, desde que as permissões NTFS sejam razoavelmente restritivas. Se desejar, permita apenas os direitos de modificação em sua própria conta.

Agora vá para a pasta compartilhada ou uma dentro dela e compartilhe-a ou use a linha de comando da seguinte maneira. Suponha que você tenha compartilhado a pasta "foo" como "fooshare", então você pode fazer

net use x: \\mycomputername\fooshare\bar\folders /persistent:no

e a unidade X: agora aponta diretamente para a pasta "pastas" dentro desse compartilhamento, então "x: \ oldfiles \ myoldfile.txt" agora é bem curto.

(O "/ persistent: no" significa que isso não sobreviverá à próxima reinicialização e o confundirá mais tarde. Não se esqueça de cancelar o compartilhamento de sua pasta quando terminar.)

Lembre-se, você não tem que compartilhar a pasta contendo o arquivo, necessariamente, se ele já está dentro de uma pasta compartilhada você pode simplesmente mapear através da participação e as pastas aninhadas para uma pasta de destino próximo ao arquivo e que funciona bem.

Eu tive que usar essa técnica para fazer uma robocopia massiva entre dois servidores quando percebemos que os usuários haviam mapeado unidades bastante profundas na estrutura da pasta, para que pudessem usar 255 caracteres a partir daí, mas que excederam o comprimento total do caminho do arquivo quando acessado a partir da raiz da unidade local.

AdamV
fonte
4
você pode evitar o compartilhamento usando subst x: C:\Some\first\part\of\the\long\pathe depois exclua a unidade comsubst x: /d
mihi
1
Boa tentativa, mas quando você tem 10 k de pastas aninhadas, não é possível.
Julian Knight
O substtruque parece funcionar bem, desde que o nome do arquivo não seja tão longo que o limite de 260 caracteres, mesmo na raiz de uma unidade.
Stephen Chung
Você também não precisa compartilhar explicitamente qualquer pasta com net use, você pode usar as ações de administração padrão:net use x: \\localhost\c$\bar\folders /persistent:no
Kapex
9

A maneira mais simples que encontrei é inicializar a partir de um CD ao vivo do ubuntu.

Como alternativa, você pode criar uma pasta compartilhada na metade do caminho e, em seguida, mapear uma unidade de rede para ela e excluir a pasta mapeada (mesmo na mesma máquina)

Col
fonte
17
É engraçado como muitas vezes um Live CD do Ubuntu irá ajudar a resolução de problemas do Windows ^^
Ivo Flipse
1
Tenho notado que eu, rede desonesto tentar um CD ao vivo, assuntos de filesystem tentar um CD ao vivo, tabela de partição corruptos etc. etc. :-)
Col
Esta é a única solução que funcionou para mim. Eu te amo, Linux! <3
David Frye
1
Execute o bash a partir do Windows Não é necessário Linux. ;-) Além disso, se você estiver executando o Windows 10, basta instalar o “Windows Subsystem for Linux", basicamente, o Windows usa ganchos de API do ubuntu para fazer o trabalho ... utilitários, incluindo "apt, ssh, rsync, find, grep, awk, sed, sort, xargs, md5sum, gpg, curl, wget, apache, mysql, python, perl, ruby, php, gcc, tar, vim, emacs, diff, patch e a maioria das dezenas de milhares de pacotes binários nos arquivos do Ubuntu! "Este é um ambiente de desenvolvimento Linux muito completo que está em execução no Windows. Zdnet.com/article/ubuntu-and-bash-arrive-on-windows-10
Dawesi
cygwin é outra alternativa para a execução de comandos Linux no Windows
atom88
5

Renomeie o diretório de recortar / colar o arquivo em outro lugar e exclua-o. Trabalha aqui.

Ou apenas no prompt de comando, se você não sentir vontade de enfrentar o problema.

Torre
fonte
Isso funciona como um encanto. Cavar lá em baixo (para mim, eram node_modulespastas super-aninhadas ), arraste-o para a área de trabalho e exclua-o. Enxágue e repita conforme você sobe algumas pastas por vez. Que problema desagradável.
nickb
7
Isso não funcionou para mim - a operação de colar falhou por causa do nome do arquivo longo - não importa onde cortá-lo.
UpTheCreek 21/01
1

Provavelmente não é a melhor maneira e estou interessado em ver o que os outros criam -

Eu tive isso uma vez e tentei algumas coisas sem sorte. Em vez de procurar uma boa ferramenta, reiniciei com o disco do Windows, fui para o console de recuperação e o excluí de lá. Trabalhou pela primeira vez e muito bem!

Além disso, você criou um Google para você e o encontrou - o DelinvFile parece bom, mas não pode atestar isso.

Editar - Aviso, acabei de ver o exposto é apenas um teste - Talvez não seja tão bom quanto eu pensava!

William Hilsum
fonte
O rimraf livre funciona muito bem e funcionou quando todas as outras idéias falharam. Ele requer node.js
Julian Knight