Arquivos com caracteres não-ASCII no nome do arquivo em um arquivo em lotes do Windows

0

Em um computador Windows comum (ocidental), tenho um arquivo

файл.txt

com letras não-ASCII no nome do arquivo. Como posso fazer o seguinte em um arquivo .bat?

dir файл.txt
ren файл.txt file.txt

etc?

Eu tentei colocar os comandos acima em um arquivo mybat.bat (usando codificação UTF-8 ou UTF-16), mas ele não funciona mesmo se eu o executar como cmd /u /c mybat.bat .

Nota: a questão não é como colocar essas letras em um arquivo de lote, mas como fazer com que o arquivo de lote faça o que é esperado (no meu exemplo, listar o arquivo e depois renomeá-lo).

Nota: o comando dir > log.txt mostra o arquivo файл.txt como ???. txt. No entanto, dir mostra este arquivo na tela corretamente como файл.txt.

    
por Alexander Gelbukh 10.03.2018 / 00:04

1 resposta

1

Seu principal problema é a fonte link Com a fonte correta, você não receberá pontos de interrogação. Então você deve adicionar Courier New ao prompt de comando. Então você poderá digitar ou exibir / ecoar tais caracteres.

Se você descobrir que alguns comandos têm problemas, tente o chcp 65001 (em resposta à sua pergunta, tenha certeza de que o chcp 65001 afetará apenas a janela de prompt do cmd). Você precisaria do chcp 65001 para redirecionamento para trabalhar em caracteres além do \ u7F. que o comando dir >asdf para escrever um arquivo com esses caracteres, precisará do chcp 65001. Mas seu comando ren funciona bem sem o 65001.

Note- OP aponta uma correção para isso .. Sua fonte estava bem .. Mas ele precisava chcp 65001.

Outro caso em que é necessário chcp 65001 é se um arquivo de lote estiver em utf8. Caso contrário, mesmo executando um arquivo em lotes com apenas letras como привет, esses serão convertidos em pontos de interrogação.

O OP também aponta uma ótima solução para o problema que o bloco de notas salva com o utf-8 com a BOM, enquanto o chcp 65001 é o UTF-8 sem o BOM. E se você tiver um arquivo de lote codificado como utf-8 com bom, isso diz apenas, por exemplo, dir, ou echo привет então não vai funcionar, mesmo que o cmd tenha codificação de 65001. Porque cmd mistura a BOM na primeira linha. Portanto, uma solução alternativa é colocar o (s) comando (s) a partir da segunda linha. (Como alternativa, pode-se usar um editor de texto que salve como utf-8 sem BOM).

    
por 10.03.2018 / 06:16