Windows ユーザーで「バッチファイル」などと言う言葉を知ってる人も、少ないと思いますが、MSDOS 時代には大変重要な機能でした。

 一連のコマンド(実行する命令)をテキストファイルに順に書いておき、拡張子を ".bat"にしておけば、このファイルをダブルクリックするだけで一連の命令を実行できるというものです。

 この機能は、"cmd.exe"(コマンドプロンプト)に引き継がれ、Windows でも実行する事が出来ます。複雑なオプションの記述が必要な ROBOCOPY コマンドなどは、バッチファイルにしておくと、繰り返し実行する場合は非常に便利です。

 

 さて、HDDをSSDに換装した時、余った旧いHDDを外付けにし、バックアップ用とし、新しいファイルや変更のあったファイルのみ更新できるように、ミラー機能を使ったROBOCOPY コマンドを記述し、バッチファイルとしたのですが、うまく動かないのです。

 これをテキストファイルにして、メモ帳で開き、全文をクリップボードにコピーし、それを別途起動したコマンドプロンプトに貼り付けると、全く問題なく動くのにです。

 

 いろいろ原因を探るうちにわかってきたのは、バッチファイルとして記録しているファイルの文字コードがおかしいのではないかと言うことですが、長い間それを確認したり変更する方法が分かりませんでした。

 

 その解決の方法を備忘録として記録しておきます。

 解説に使うファイルはこの解説のために作成した"BACKUp USB(D) テスト.bat"と言うファイルです。

 拡張子が ".bat"のバッチファイルは、ファイル名を右クリックし、表示されたメニューの「編集」をクリックすることにより、Windows の「メモ帳」で開いて編集する事が出来ます。

バッチファイルを右クリック上矢印 し、 下矢印「編集」をクリック

 

バッチファイル(テスト用)の内容下矢印

(最後の pause は、実行した内容を表示後停止させるため)

(これがないと、一瞬で表示が消えてしまう)

バッチファイル内上矢印には、日本語文字が使用されている。

 

これを実行すると、下矢印見事に日本語文字が化ける。

 コマンドプロンプトから出力されるエラーは日本語で正常に表示されているので、コマンドプロンプトの日本語表示機能は正常なことが分かる。

 

 バッチファイルを開いているメモ帳の「ファイル」をクリックし、表示されたメニューの「名前を付けて保存」をクリックする。

 

 「ファイルの種類」はデフォルトでは"*.txt"となっているので、「すべてのファイル」に変更しておくとバッチファイルも表示される。

 「文字コード」を確認すると、"UTF-8"となっていることが分かる。

 

 これが、"ANSI"以外になっていると、コマンドプロンプトが理解できないようだ。

 

これを"ANSI"に変更し、[保存」する。

 

 文字コードを"ANSI"に変更したバッチファイルを実行すると、文字化けは解消していました。

 

 同じ手順でバックアップ用のバッチファイルの文字コードを"ANSI"に変更して無事正常に実行できるようになりました。

 

 エクスプローラーの「新規作成」で作成した「テキストドキュメント」では、文字コードが "UTF-8" になるようです(昔は "ANSI " だったと思うのですが、いつの頃かデフォルトが "UTF-8" となったようです)。

 テキストファイルとして使用する場合は何ら問題はないのですが、これをバッチファイルとして使用する場合は、最初に"ANSI"コードのファイルとなるように保存しておくよう注意することが必要です。

 

[[追記]]

 Windows メモ帳で、文字コードを簡単に確認する方法が分かりました。

 メモ帳で、テキストファイルを開くとデフォルトでは最下行に何も表示されていませんでした。

 

 そこで、「表示」をクリックして、「ステータスバー」にチェックを入れると、、、

 

 画面の最下行右端に、文字コードが表示されます。

 バッチファイルを作成する場合は、本文で述べたように、「名前を付けて保存」機能で、文字コードを"ANSI"に変更して保存します。

 UTF-8 がメモ帳の文字コードのデフォルトになったのは、Windows 10 バージョン 1903 以降のようです。

 

[[追記2]]

 この記事で述べた様に、バッチファイルの文字コードを ANSI (shift JIS) に変更する方法の他に、コマンドプロンプトの動作を、UTF-8 で行えるようにする方法もある。

 (→こちら参照 コマンドプロンプトの文字コードをUTF-8に変える)

 

 バッチファイルの先頭に "chcp 65001" を記入しておくと、以下のテキストの文字コードが UTF-8 として実行される。

 

 "chcp 932" は、ANSI (S-JIS) に戻す。

 

 コマンド行で "chcp" と入力すると、現在の文字コード値が表示される。