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:
-
Utilitários do
- Cygwin:
-
mv <bogus_name> <new_name>
-
-
Scripting.FileSystemObject
- Alguns arquivadores como o WinRAR / 7-Zip (sua GUI pode permitir renomear arquivos / dirs regulares)
- Cygwin:
-
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).