2009-09-23 15:56:39 +0000 2009-09-23 15:56:39 +0000
203
203

Como apagar um ficheiro no Windows com um nome de ficheiro demasiado longo?

A minha mulher tem vários ficheiros e pastas que de alguma forma acabaram por ter nomes de ficheiro que os tornaram indetectáveis (não podem ser apagados) por meios normais ou através da linha de comando. Creio que os nomes dos ficheiros são demasiado longos devido à profundidade das estruturas das pastas. Alguém sabe de um bom utilitário para limpar ficheiros como este?

Respostas (8)

428
428
428
2012-08-29 13:38:16 +0000

Quando você quer apagar completamente um diretório e ele contém caminhos longos, robocopy faz um MUITO bom trabalho:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

Isto funciona porque a robocopy internamente [ usa as versões Unicode-aware das funções Win32, com o prefixo \?Quando você quer apagar completamente um diretório e ele contém caminhos longos,robocopy` faz um MUITO bom trabalho:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

Isto funciona porque a robocopy internamente usa as versões Unicode-aware das funções 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 este processo mais de uma vez para se livrar de todos os arquivos.

91
91
91
2009-09-23 16:01:40 +0000

A partir de um prompt de comando:

dir /X

Isto irá listar os seus ficheiros/pastas em formato de nomes curtos. Depois utilize o nome abreviado exactamente como escrito para apagar o ficheiro:

del LONGF~1.txt
53
53
53
2009-09-23 17:40:55 +0000

Eu trabalho progressivamente no caminho, rebaptizando cada pasta-mãe sucessivamente para “1” e tentando apagar. Está efectivamente a encurtar o caminho de cada vez e nunca tive de trabalhar em mais de 4 ou 5 directórios até ser finalmente capaz de apagar toda a estrutura do directório (que pode ou não ser o que pretende). Pode também fazer isto a partir da última pasta de crianças e trabalhar para cima ou para baixo.

13
13
13
2009-09-23 16:12:29 +0000

Em alguns programas, incluindo o Command Prompt (cmd.exe), pode contornar o limite do comprimento do ficheiro prefixando o caminho completo com \.Em alguns programas, incluindo o Command Prompt (cmd.exe`), pode contornar o limite do comprimento do ficheiro prefixando o caminho completo com da seguinte forma:

\.\C:\some directory\other directory\a file with long name
13
13
13
2012-02-21 17:18:15 +0000

Um truque que utilizei para contornar a limitação do comprimento “caminho completo e nome de ficheiro” a fim de mover, copiar ou apagar algo é encurtá-lo “entrando” a meio (ou mais) ** utilizando uma letra de unidade mapeada apontando para uma pasta no caminho***.

então você tem c:\someadamente um caminho longo…\e barras de pés]pastas de ficheiros de arquivo .txt.

Então mapeie uma letra de unidade arbitrária para algum lugar ao longo do caminho de modo que o primeiro pedaço do caminho se torne apenas alguns caracteres longos. Pré-requisito - a pasta tem de estar numa pasta partilhada (que pode já estar se estiver num servidor, que é onde tenho de o fazer), e se ainda não estiver, então escolha uma pasta algures no caminho e partilhe-a. Dependendo do seu ambiente e nível de paranóia, permita a todos modificar o acesso à partilha, desde que as permissões NTFS sejam razoavelmente restritivas. Se quiser, basta permitir modificar os direitos apenas para a sua própria conta.

Agora vá para a pasta partilhada ou uma dentro dela e partilhe-a, ou use a linha de comando como se segue. Assuma que partilha a pasta “foo” como “fooshare”, depois pode fazer

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

e a drive X: agora aponta directamente para a pasta “folders” dentro dessa partilha, por isso “x:\oldfiles\myoldfile.txt” é agora bastante curto.

(O “/persistent:no” significa que isto não vai sobreviver à próxima reinicialização e confundi-lo mais tarde. Não se esqueça de desembrulhar a sua pasta quando terminar)

Lembre-se, não precisa necessariamente de partilhar a pasta que contém o ficheiro, se já estiver dentro de uma pasta partilhada pode apenas mapear através a partilha e as pastas aninhadas para uma pasta de destino near para o ficheiro e isso funciona bem.

Tive de utilizar esta técnica fazendo uma robocópia massiva entre dois servidores quando nos apercebemos que os utilizadores tinham unidades mapeadas bastante profundas na estrutura de pastas, por isso tinham sido capazes de utilizar 255 caracteres a partir daí, mas isso excedeu o comprimento total do caminho do ficheiro quando acedido a partir da raiz da unidade local.

9
9
9
2009-09-23 15:59:00 +0000

A forma mais simples que encontrei foi arrancar de um CD ubuntu live.

Como alternativa pode criar uma pasta partilhada a meio do caminho e depois mapear uma unidade de rede para isso e fazer a eliminação da pasta mapeada (mesmo na mesma máquina)

5
5
5
2009-09-23 19:39:20 +0000

Renomeie o diretório de cortar/colar o arquivo em outro lugar e depois o apague. Funciona aqui.

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

1
1
1
2009-09-23 16:00:00 +0000

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

Eu tive isto uma vez e tentei algumas coisas sem sorte. Em vez de procurar uma boa ferramenta, reiniciei com o Windows Disk in, fui à consola de recuperação e apaguei-a de lá. Funcionou da primeira vez e muito bem!

Também, acabei de fazer um Google para si e encontrei isto - DelinvFile Looks Good but cannot vouch for it.

Edit - Aviso, só de ver o acima é apenas um teste - Talvez não tão bom como eu pensava inicialmente!