Corrigir um arquivo / diretório que diz "refere-se a um local que não está disponível" / "arquivo não encontrado" ao tentar abri-lo

1

Eu tenho um monte de pastas que, ao tentar navegar nelas, dizem "<directory> refers to a location that is unavailable" . Em Process Monitor , vejo que o código de erro real é NAME_NOT_FOUND - mas eles são presente.

  • chkdsk não encontra erros no sistema de arquivos.
  • Também não são junções ou links simbólicos (verificados instalando a Extensão de shell de link )

Eu notei que os nomes têm um traço comum:

  • todos eles têm um ponto no final
  • no passado, experimentei o mesmo com arquivos / diretórios com nomes quebrados, como na imagem:

Oqueestáacontecendoaquiecomocorrijoisso?

Como excluir um arquivo terminando em um ponto no Windows 7? oferece maneiras de deletar , mas isso não é aceitável porque eu preciso do conteúdo.

  • Ao contrário de del sugerido nessa pergunta, rename "<directory>" "<smth else>" produz o mesmo "File not found" .
  • Nenhum \?\<path> funciona (mesmo erro).
por ivan_pozdeev 14.05.2018 / 19:11

1 resposta

1

A API do Windows "pré-processa" os caminhos antes de transmiti-los ao kernel. A documentação sobre isso é incompleta: em vez disso, o MSDN lista apenas o limitações da rede. Em particular:

Do not end a file or directory name with a space or a period. Although the underlying file system may support such names, the Windows shell and user interface does not.

As APIs de E / S Unicode que aumentam a limitação MAX_PATH parece pular esse pré-processamento também.

Existem duas maneiras de corrigir:

  • Use um programa que use a API de E / S Unicode sob o capô. As opções incluem:

  • Use o nome 8.3 para acessar o arquivo / dir:

    >dir /x
    <...>
    <DIR>          58B0~1       Для П.П.
    
    >rename 58B0~1 new_name
    

Usar o "caminho nativo" - \?\<full path> - não ajuda aqui porque, para alguns cmd builtins - pelo menos, dir e rename - esses caminhos ainda estão sujeitos ao pré-processamento :

>dir "\?\C:\Users\Me\Для П.П."
<...>
 Directory of \?\C:\Users\Me\Для П.П

File Not Found

(observe o ponto final ausente na saída).

    
por 14.05.2018 / 19:11