バッチファイルの文字コードを UTF-8 (BOM なし) で保存した場合に、REM コマンドによるコメント文に日本語(具体的には「を」を使用した場合)を記述すると、実行時にコメント文の一部を未定義のコマンドと誤認してエラーメッセージが表示する場合の対処例を紹介します。
また、UTF-8 などを標準出力の文字コードに指定するコマンドについても紹介します。

誤認識が発生したバッチファイル
誤認識は前回の記事のバッチファイルのテスト中に発生しました。
前回の記事は以下です。
前回紹介したバッチファイルを Shift-JIS ではなく、文字コード UTF-8 で保存して実行すると、コメントの一部(「を」を起点にしていると思われます)をコマンドとして理解しようとしてエラーメッセージ(処理は続行します)が表示されました。
前回との違いは UTF-8 の文字コードを指定する chcp コマンドを2行目に追加したことです。
@echo off
chcp 65501
REM 管理者かどうか判定し、違うなら再起動(管理者として)
net session >nul 2>&1
if %errorLevel% neq 0 (
echo 管理者権限で再実行します...
powershell -Command "Start-Process '%~f0' -Verb runAs"
exit /b
)
echo 管理者として実行されています。
REM ここに処理を記述します。
echo 処理が完了しました。ウィンドウを閉じるには何かキーを押してください。
pause >nul
アクティブなコンソール コード ページを変更します。 If used without parameters, chcp displays the number of the active console code page.
chcp | Microsoft Learn
【Python】pyautogui(PyMsgBox)インストールエラーに対する暫定対策 #error – Qiita
chcp 65501
で文字コードUTF-8に変更
UTF-8 (BOM なし) + CRLF で保存したバッチファイルの実行
以下は 文字コード UTF-8 (BOMなし) 改行コード CRLF で保存して実行しました。
※前回は、前回の記事に書いた通り、文字コード Shift-JIS 改行コード CRLF で保存して実行しました。
「REM ここに処理を記述します。」の「を」の文字コードが UTF-8 (BOMなし) の場合は、バッチの実行時にコメント文なのに特別な認識をされてエラーメッセージが表示されました。
エラーメッセージは出ますが、処理は中断せず最後まで行われました。
Active code page: 65001
管理者として実行されています。
'�述します。' is not recognized as an internal or external command,
operable program or batch file.
処理が完了しました。ウィンドウを閉じるには何かキーを押してください。
バッチファイルを Shift-JIS で保存
バッチファイルを文字コード UTF-8 で保存すると、 REM コマンド(コメント行)の文字化けが発生する原因になる可能性があるため、日本語を記述する場合は Shift-JIS にすることが推奨されています。
一般的な文字コードである
UTF-8
を利用すると、rem
コマンドで記述したコメントの文字化けが発生することがあります。また、場合によってはエラーが発生することもあります。
そのため、日本語を記述する場合は、文字コードを
バッチファイルでコメントを記述する方法と具体例【remコマンド】 – コマンドプロンプトの教科書Shift-JIS
に設定することをおすすめします。
以下は、先ほどのバッチファイルを、文字コード Shift-JIS 改行コード CRLF で保存して実行した結果です。
行数が5行から3行に減ったことから、エラーメッセージは消えたようですが、日本語の部分が文字化けして表示されます。
これは、文字コードを Shift-JIS にしたのに、バッチファイルの2行目 chcp 65501 で、文字の出力で 文字コード UTF-8 を使うように指定しているせいです。
Active code page: 65001
�Ǘ��҂Ƃ��Ď��s����Ă��܂��B
�������������܂����B�E�B���h�E�����ɂ͉����L�[������Ă��������B
実行結果
UTF-8 を指定している chcp 65501 を除去します。
文字コード Shift-JIS 改行コード CRLF で保存してから実行します。
@echo off
REM 管理者かどうか判定し、違うなら再起動(管理者として)
net session >nul 2>&1
if %errorLevel% neq 0 (
echo 管理者権限で再実行します...
powershell -Command "Start-Process '%~f0' -Verb runAs"
exit /b
)
echo 管理者として実行されています。
REM ここに処理を記述します。
echo 処理が完了しました。ウィンドウを閉じるには何かキーを押してください。
pause >nul
コメント行をコマンドと誤認したエラーのメッセージが表示されなくなり、日本語の echo の標準出力も文字化けせずに行われました。
管理者として実行されています。
処理が完了しました。ウィンドウを閉じるには何かキーを押してください。

まとめ
今回は、バッチファイルの文字コードを UTF-8 (BOM なし) で保存した場合に、REM コマンドによるコメント文に日本語(具体的には「を」を使用した場合)を記述すると、実行時にコメント文の一部を未定義のコマンドと誤認してエラーメッセージが表示する場合の対処例を紹介しました。
また、UTF-8 などを標準出力の文字コードに指定するコマンドについても紹介しました。
参照サイト Thank You!
- バッチファイル – Wikipedia
- chcp | Microsoft Learn
- 【Python】pyautogui(PyMsgBox)インストールエラーに対する暫定対策 #error – Qiita
- バッチファイルでコメントを記述する方法と具体例【remコマンド】 – コマンドプロンプトの教科書
記事一覧 → Compota-Soft-Press
コメント