Arquivos com nomes de arquivos ilegais [duplicados]

3

Eu tenho alguns arquivos cujos nomes possuem caracteres como "?" e ":" que são proibidos pelo windows. Não tenho certeza de como eles conseguiram chegar lá com esses nomes, pois não posso criar manualmente arquivos com esses nomes. Eles são recuperados de uma unidade HFS, mas a ferramenta que os recuperou estava sendo executada no Windows e, portanto, deveria estar sujeita às mesmas restrições ao criá-las, eu acho.

De qualquer forma ... agora que eles estão aqui, posso abri-los, mas não consigo mover, copiar, renomear ou excluí-los. Eu quero excluir alguns deles, mas a maioria eu quero salvar e copiar para outra unidade. Como eu poderia fazer isso?

    
por Josh 01.01.2010 / 23:13

6 respostas

5

Você não pode excluir um arquivo ou uma pasta em um volume do sistema de arquivos NTFS

Causa 5: O nome do arquivo inclui um nome reservado no espaço de nomes do Win32 Se o nome do arquivo inclui um nome reservado (por exemplo, "lpt1") no espaço de nome do Win32, talvez não seja capaz de excluir o arquivo. Para resolver esse problema, use um programa não-Win32 para renomear o arquivo. Você pode usar uma ferramenta POSIX ou qualquer outra ferramenta que use a sintaxe interna apropriada para usar o arquivo.

Além disso, você poderá usar alguns comandos internos para ignorar as verificações de nomes reservados do Win32, se usar uma sintaxe específica para especificar o caminho do arquivo. Por exemplo, se você usar o comando Del no Windows XP, poderá excluir um arquivo chamado "lpt1" se especificar o caminho completo do arquivo usando a seguinte sintaxe especial:

del \?\c:\path_to_file\lpt1

Para obter mais informações sobre como excluir arquivos com nomes reservados no Windows NT e Windows 2000, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento da Microsoft:

120716 Como remover arquivos com nomes reservados no Windows

Para obter mais informações sobre como excluir arquivos com nomes reservados no Windows XP, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento da Microsoft:

315226 Como remover arquivos com nomes reservados no Windows XP

Se você abrir um identificador para um arquivo usando o típico mecanismo CreateFile do Win32, determinados nomes de arquivos serão reservados para dispositivos DOS de estilo antigo. Para compatibilidade com versões anteriores, esses nomes de arquivo não são permitidos e eles não podem ser criados usando chamadas de arquivo Win32 típicas. No entanto, esse problema não é uma limitação do NTFS.

Você pode usar um programa Win32 para ignorar as verificações de nome típicas executadas quando um arquivo é criado (ou excluído) usando a mesma técnica usada para atravessar pastas mais profundas que MAX_PATH. Além disso, algumas ferramentas POSIX não estão sujeitas a essas verificações de nome.

Causa 6: O nome do arquivo inclui um nome inválido no espaço de nomes do Win32 Talvez não seja possível excluir um arquivo se o nome do arquivo incluir um nome inválido (por exemplo, o nome do arquivo tem um espaço à direita ou um ponto final ou o nome do arquivo é composto apenas por um espaço). Para resolver esse problema, use uma ferramenta que usa a sintaxe interna apropriada para excluir o arquivo. Você pode usar a sintaxe "\? \" Com algumas ferramentas para operar nesses arquivos, por exemplo:

del "\?\c:\path_to_file_that contains a trailing space.txt "

A causa desse problema é semelhante à Causa 4. No entanto, se você usar a sintaxe típica do Win32 para abrir um arquivo que tenha espaços à direita ou períodos finais em seu nome, os espaços ou pontos finais serão removidos antes que o arquivo real seja aberto . Portanto, se você tiver dois arquivos na mesma pasta denominada "AFile.txt" e "AFile.txt" (observe o espaço após o nome do arquivo), se você tentar abrir o segundo arquivo usando chamadas Win32 padrão, abra o primeiro arquivo em vez disso. Da mesma forma, se você tiver um arquivo cujo nome é apenas "" (um caractere de espaço) e tentar abri-lo usando chamadas padrão do Win32, abra a pasta pai do arquivo. Nessa situação, se você tentar alterar as configurações de segurança nesses arquivos, poderá não conseguir fazer isso ou poderá alterar inesperadamente as configurações em arquivos diferentes. Se esse comportamento ocorrer, você pode pensar que você tem permissão para um arquivo que realmente tenha uma ACL restritiva.

    
por 01.01.2010 / 23:25
2

De minha resposta para uma pergunta semelhante :

Método à prova de falhas :

Inicialize em um LiveCD do Linux. O Ubuntu tem um bom suporte a NTFS, e o Linux lida com muito mais caracteres em nomes de arquivos do que com o Windows. O script de renomeação perl pode ser incluído como o comando rename do sistema, o que é útil para modificar em lote muitos arquivos com nomes semelhantes.

No shell de comando do Windows com nomes de arquivo curtos

O comando DOS DIR / X mostra nomes de arquivos curtos, se eles existirem no seu sistema .

$ cmd
c:\test> dir /x
 Volume in drive E is NUVOL
 Volume Serial Number is 80D3-A96D

 Directory of e:\tor\test

10/04/2009  05:15 AM    <DIR>                       .
10/04/2009  05:15 AM    <DIR>                       ..
10/04/2009  05:11 AM                 0 CLIP-2~1.MOV clip-2009-10-01 21;26;00.mov
               1 File(s)              0 bytes
               2 Dir(s)   5,201,670,144 bytes free

Se eles existirem, o comando REN os moverá para um novo nome; o novo nome pode ser um novo nome de arquivo longo (válido).

c:\test> ren CLIP-2~1.MOV "clip-2009-10-01_21-26-00.mov"

Isso é como consertar um.

Para processar em lote todos eles, você precisa 1) pegar os nomes curtos de todos os arquivos que deseja mover; 2) converta sua listagem em um arquivo de lote com os comandos REN apropriados; e 3) execute o script em lote resultante. Se você está confortável com o perl (ou sed / awk, python, o que for), você pode fazer o script sozinho, ou você pode criar manualmente a partir da listagem que você fez no passo 1.

Mas se DIR / X não mostrar os nomes curtos de arquivos, seu sistema os desativará e esta solução não ajudará.

    
por 02.01.2010 / 03:21
0

Se a sugestão de Idigas não funcionar, você pode sempre movê-las com um LiveCD do Linux, como o Ubuntu . Ele permite pontos de interrogação e dois pontos em nomes de arquivos para que ele não tenha nenhum problema em lidar com os arquivos.

Você só precisa montar sua unidade primeiro. Se o XP for seu único sistema operacional instalado no disco, provavelmente ele poderá ser montado em /dev/sda1 ou /dev/hda1 , dependendo se for uma unidade SCSI ou uma unidade IDE.

para montar uma unidade SCSI (se estiver executando NTFS):

mount -t ntfs-3g /dev/sda1 /mnt

para montar uma unidade IDE (executando NTFS):

mount -t ntfs-3f /dev/hda1 /mnt

Se for um volume FAT32, você pode usar o vfat como o tipo ( -t vfat )

    
por 01.01.2010 / 23:26
0

Tente Excluir médico (freeware) ou delinvfiles (shareware, mas tem mais recursos) para deletar o arquivo com seu nome curto ou UNC

    
por 02.01.2010 / 02:58
0

Eu usei o Windows Serviços para Unix para remover esses tipos de arquivos no passado.

A razão pela qual esses arquivos podem ser criados é que o Windows tem suporte para POSIX, portanto, o NTFS foi projetado para suportar todos os recursos dos sistemas de arquivos POSIX. No entanto, programas Win32 / Win64 normais, que usam a API do Windows normal, não podem acessar esses recursos. Você precisa usar um programa escrito na API nativa ou na API POSIX para criar ou remover tais arquivos.

    
por 02.01.2010 / 07:49
-1

Por alguma razão, eu geralmente tenho mais sorte ao mover / copiar / renomear / (qualquer coisa realmente) arquivos da linha de comando, do que ao fazer isso com o Windows Explorer.

    
por 01.01.2010 / 23:16