web-dev-qa-db-ja.com

Windowsバッチファイルのファイル名にASCII以外の文字が含まれるファイル

通常の(西洋の)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として画面に正しく表示します。

2

あなたの主な問題はフォントです https://stackoverflow.com/questions/9321419/unicode-utf-8-text-file-gibberish-on-windows-console-trying-to-display-hebrew With疑問符が表示されない正しいフォント。したがって、コマンドプロンプトにCourierNewを追加する必要があります。次に、そのような文字を入力または表示/エコーできるようになります。

その後、一部のコマンドに問題があることがわかった場合は、chcp 65001を試してください(質問への回答として、chcp 65001はそのcmdプロンプトウィンドウにのみ影響しますのでご安心ください)。\u7Fを超える文字でリダイレクトを機能させるには、chcp65001が必要です。これらの文字を含むファイルを書き込むためのdir >asdfコマンドには、chcp 65001が必要です。ただし、renコマンドは65001がなくても正常に機能します。

注-OPはこれに対する修正を指摘しています。彼のフォントは問題ありませんでした。しかし、彼はchcp65001を必要としていました。

Chcp 65001が必要なもう1つのケースは、バッチファイルがutf8にある場合です。それ以外の場合は、приветのような文字だけでバッチファイルを実行しても、それらは疑問符に変換されます。

OPは、メモ帳がBOMを使用したutf-8で保存するのに対し、chcp65001はBOMを使用しないUTF-8であるという問題の優れた回避策も指摘しています。そして、bomを使用してutf-8としてエンコードされたバッチファイルがある場合、それはちょうど例えばdir、またはechoприветの場合、cmdのエンコーディングが65001であっても、機能しません。cmdはBOMを最初の行に混在させるためです。したがって、回避策は、コマンドを2行目から開始することです。 (または、BOMなしでutf-8として保存するテキストエディターを使用することもできます)。

2
barlop