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


Esta questão já tem uma resposta aqui:

Minha esposa tem vários arquivos e pastas que de alguma forma acabaram tendo nomes de arquivos que fizeram com que eles não pudessem ser apagados (não podem ser apagados) por meios normais ou via linha de comando. Eu acredito que os nomes de arquivos são muito longos devido à profundidade das estruturas de pastas. Alguém sabe de um bom utilitário para limpar arquivos como este?


195


origem


Como esses arquivos foram criados? - Nick
Desculpe pela minha ignorância sobre este tópico, mas o Windows não deve lidar com esses arquivos? O que Will Eddins postou não deveria ser feito automaticamente pelo Windows (mesmo do Explorer)? - Stefanos Kalantzis
@ Mokubai- A questão duplicada deve ser marcada como uma duplicata desta, como essa questão é mais antiga. - cybermonkey
@cybermonkey: E tem uma resposta melhor. - Ellesedil
Para outros leitores, o Método 7zip com CTRL + DELETE é o método mais fácil na minha opinião ... - Christian Gollhardt


Respostas:


Quando você deseja excluir completamente um diretório e ele tem um arquivo com nomes longos dentro dele, o robocopy faz um trabalho MUITO bom:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /s /mir
rmdir empty_dir
rmdir the_dir_to_delete

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

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


415



Eficiente quando não há nome abreviado (8.3) armazenado no sistema de arquivos. - Antoine RODRIGUEZ
Isso funcionou muito bem com minha teimosa Windows Store arquivos de cache que se recusou a ser excluído. Obrigado! - Samir
Eu tive que adicionar / limpar a linha de robocopy para que isso funcionasse, mas foi o truque depois disso - actionshrimp
Robocopy é o que me meteu nessa bagunça, mas nunca me ocorreu usar Robocopy para me tirar dela. Ótima resposta! Obrigado! - Jay Michaud
@SarahofGaia, meu mal, é 2¹⁶ - 1 na verdade - Benoit


Em um prompt de comando:

dir /X

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

del LONGF~1.txt

89



Eu gosto disso, é um pouco de pensamento lateral. - Col
Embora eu não possa garantir que funcionará nesse caso, usei-o várias vezes para excluir pastas que têm caracteres inválidos no final que impossibilitam a exclusão por meios normais. - Will Eddins
Isso funciona para arquivos e pastas no diretório atual, mas se você, de alguma forma, conseguir se encontrar dentro uma pasta cujo caminho é muito longo, não ajudará. Por exemplo, atualmente estou em um console em um caminho muito longo e não posso dir ou cd ... - Bobson
@Bobson Se você não puder dir usar pushd em vez de. Isso funcionou para mim. - BadHorsie
Isso não funciona com o Windows 10, o nome do arquivo exibido é o longo - Loenix


Eu progressivamente trabalho meu caminho no caminho, renomeando cada pasta pai sucessiva para "1" e tentando excluir. Você está efetivamente encurtando o caminho a cada vez e eu nunca tive que trabalhar em mais de 4 ou 5 diretórios até que eu finalmente possa deletar toda a estrutura de diretório (que pode ou não ser o que você quer). Você pode fazer isso a partir da última pasta filha e subir ou descer.


51



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
Feliz em ajudar... - joeqwerty
Foi a única sugestão que funcionou de maneira estranha. - Nestor Ledon
Não é possível fazer isso no windows 10 ... renomear lança "filename to long 'error - Dawesi
Isso não só resolveu o problema para mim, como também explica como acabei com o problema. Eu devo ter tido um caminho que estava perto do limite, então eu renomei uma pasta pai (adicionado algo como "backup nov 2016 salvar" para o nome), que empurrou os arquivos em subpastas acima do limite. É bom saber a causa e a solução, mesmo sabendo que pode acontecer de outras maneiras também, acho que é uma maneira comum de acontecer com as pessoas. - eselk


Em alguns programas, incluindo o Prompt de Comando (cmd.exe), você pode contornar o limite de tamanho de arquivo prefixando o caminho completo com \\.\ como isso:

\\. \ C: \ algum diretório \ outro diretório \ um arquivo com nome longo

13



não funciona no Windows 10 - Dawesi
obrigado, cmd trabalhou um charme com isso no Win7 rm -rf \\directoryname - Philip Pryde


Um truque que eu usei para contornar a limitação de comprimento "caminho completo e nome de 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 no caminho.

então você tem c: \ some \ long \ caminho ... \ 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 bloco do caminho tenha apenas alguns caracteres. Pré-requisito - a pasta deve estar em uma pasta compartilhada (que já pode ser 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 do NTFS sejam razoavelmente restritivas. Se você quiser, apenas permita modificar os direitos apenas para 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ê compartilhou a pasta "foo" como "fooshare", então você poderia fazer

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

e o X: drive agora aponta diretamente para a pasta "folders" 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 esqueça de descompactar sua pasta quando terminar.

Lembre-se, você não precisa compartilhar a pasta que contém o arquivo necessariamente, se ele já estiver dentro de uma pasta compartilhada, você pode apenas mapear através o compartilhamento e as pastas aninhadas para uma pasta de destino perto para o arquivo e isso funciona bem.

Eu tive que usar essa técnica fazendo uma robótica maciça entre dois servidores quando percebemos que os usuários tinham mapeado drives bem fundo na estrutura de pastas, então eles puderam usar 255 caracteres de lá, mas isso excedeu o comprimento total do caminho do arquivo quando acessado a partir da raiz da unidade local.


13



você pode evitar o compartilhamento usando subst x: C:\Some\first\part\of\the\long\path e depois excluir a unidade com subst x: /d - mihi
Boa tentativa, mas quando você tem 10 de k's de pastas aninhadas não é possível. - Julian Knight
o subst O truque parece funcionar bem, desde que o nome do arquivo não seja assim tempo para fazê-lo passar por 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 os compartilhamentos admin padrão: net use x: \\localhost\c$\bar\folders /persistent:no - kapex


A maneira mais simples que encontrei é inicializar a partir de um live CD do Ubuntu.

Como alternativa, você pode criar uma pasta compartilhada na metade do caminho e, em seguida, mapear uma unidade de rede para isso e fazer a exclusão da pasta mapeada (mesmo na mesma máquina)


9



É engraçado quantas vezes um Live CD do Ubuntu ajuda a solucionar problemas do Windows ^^ - Ivo Flipse♦
Eu tenho notado que eu mesmo, rede desonesto tentar um CD ao vivo, problema de sistema de arquivos tentar um CD ao vivo, tabela de partição corrompida etc etc :-) - Col
Esta é a única solução que funcionou para mim. Eu te amo, Linux! <3 - David Frye
Executar bash das janelas Não é necessário Linux. ;-) Além disso, se você estiver executando o Windows 10, basta instalar o "Windows Subsystem para Linux", basicamente o Windows usa ganchos de API do Ubuntu para fazer o trabalho ... utils incluindo "apt, ssh, rsync, encontrar, grep, awk, sed, tipo, 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 por acaso está rodando no Windows. zdnet.com/article/ubuntu-and-bash-arrive-on-windows-10 - Dawesi
cygwin é outra alternativa para executar comandos LINUX no Windows - atom88


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

Ou apenas a partir do prompt de comando, se você não sentir vontade de passar pelo problema.


5



Isso funciona como um encanto. Cavar lá em baixo (para mim, foi super-aninhado node_modules pastas), arraste-o para fora da área de trabalho e exclua. Enxague e repita ao subir algumas pastas de cada vez. Que problema desagradável. - nickb
Isso não funcionou para mim - a operação de colar falhou por causa do nome de arquivo longo - não importa onde cortar. - UpTheCreek


Provavelmente não é o melhor caminho e estou interessado em ver o que os outros inventam -

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 até o console de recuperação e o excluí de lá. Trabalhei pela primeira vez e muito bem!

Além disso, só fiz um Google para você e achei isso - DelinvFile Parece bom, mas não pode garantir isso.

Edit - Atenção, só vi o acima é apenas um julgamento - Talvez não tão bom quanto eu pensava!


1



O rimraf livre funciona muito bem e funcionou quando todas as outras ideias falharam. Requer node.js - Julian Knight