
通常の(西洋の)Windowsコンピュータでは、ファイルがあります
файл.txt
ファイル名に非 ASCII 文字が含まれています。.bat ファイルから次の操作を実行するにはどうすればよいですか?
dir файл.txt
ren файл.txt file.txt
等。?
上記のコマンドをファイルmybat.bat
(UTF-8 または UTF-16 エンコードを使用)に配置しようとしましたが、 として実行しても機能しませんcmd /u /c mybat.bat
。
注: 質問は、バッチ ファイルにこれらの文字をどのように入れるかではなく、バッチ ファイルに期待どおりの動作を実行させる方法 (私の例では、ファイルを一覧表示して名前を変更する) です。
注意:dir > log.txt
コマンドはファイル файл.txt を ????.txt として表示します。ただし、dir
画面上ではこのファイルは正しく файл.txt として表示されます。
答え1
主な問題はフォントですhttps://stackoverflow.com/questions/9321419/unicode-utf-8-text-file-gibberish-on-windows-console-trying-to-display-hebrew正しいフォントを使用すると疑問符は表示されません。そのため、コマンド プロンプトに Courier New を追加する必要があります。そうすると、そのような文字を入力または表示/エコーできるようになります。
その後、いくつかのコマンドに問題があることがわかった場合は、chcp 65001 を試してください (質問への回答として、chcp 65001 はコマンド プロンプト ウィンドウにのみ影響しますのでご安心ください)。リダイレクトが \u7F を超える文字で機能するには、chcp 65001 が必要です。たとえば、dir >asdf
それらの文字を含むファイルを書き込むコマンドには、chcp 65001 が必要です。ただし、ren コマンドは 65001 がなくても正常に機能します。
注: OP はこれに対する修正を指摘しています。フォントは問題ありませんでした。ただし、chcp 65001 が必要でした。
chcp 65001 が必要なもう 1 つのケースは、バッチ ファイルが utf8 である場合です。それ以外の場合は、 привет のような文字だけのバッチ ファイルを実行しても、それらは疑問符に変換されます。
OP は、メモ帳が BOM 付きの UTF-8 で保存するのに対し、chcp 65001 は BOM なしの UTF-8 である問題に対する優れた回避策も指摘しています。また、BOM 付きの UTF-8 でエンコードされたバッチ ファイル (例: dir、echo привет) がある場合、cmd のエンコードが 65001 であっても動作しません。cmd が最初の行に BOM を混在させるためです。したがって、回避策は、2 行目からコマンドを配置することです (または、BOM なしの UTF-8 で保存するテキスト エディターを使用することもできます)。