🥷

バッチファイルの文字化け'∩╗┐'の対応方法について

2024/03/29に公開

宣伝

Flutterに関する技術ブログを運営しています。
ご興味のある方は、よかったらご覧ください♪
https://flutterdevelop.blog/

本題

バッチファイルを実行すると、以下のようなエラーが発生しました。

'' is not recognized as an internal or external command,
operable program or batch file.

要約すると、「そんなコマンド知らん」です。
もちろん"∩╗┐"という文字はバッチファイルに入れいていません。
どうやら何かが文字化けし、正しいコマンドが実行されていないようです。

事象

このエラーが発生した状況は以下です。
 
ファイル文字コード:UTF-8
環境:Windows

バッチファイルをWindows既存アプリ「メモ帳」保存すると
1行目のコードに対し、該当の文字化けが発生します。

問題

バッチファイルの1行目のコードが正常に実施されません。
2行目以降は正常に実施されますが、意図した結果にならない可能性があります。
 
私の場合は「@echo off」を1行目に設定していたため、
処理自体は問題なく実施されましたが、「@echo off」が機能していないため、
全てのコメントが表示されてしまいました。

原因

全てのWindowsで起こる事象ではありませんが、
環境により「メモ帳」で保存すると、BOM付きのテキストデータに変換されます。
BOMとは、"Byte Order Mark"の略で、詳しくは以下サイトを参照ください。
参考サイト:UTF-8のBOM付き・BOM無しの違いと確認方法

BOM付きとなるとUTF-8データの場合、先頭3バイトに見えないデータが付与されています。
しかしバッチファイルはこれをコードと認識してしまうため、上記のエラーが発生します。

対策

検索すれば色々と方法はあったのですが、
個人的に以下の方法が最も簡単だった方法をご紹介します。

方法1

1.サクラエディタで対象のバッチファイルを開きます。

2.ファイルから「名前を付けて保存」をクリックし、
  以下の「BOM」のチェックを外します。
image.png
 
3.「保存」をクリックすると、BOMが除去された内容で保存されます。

方法2

この方法はエラーを取り除く方法ではありませんが、
状況により、サクラエディタが使用できない場面での対象に有効です。
 
方法としては単純で、1行目のコードがエラーとなるならば、1行目に何も書かなければ、解決できます。

-空白行-
@echo off

ただし、先頭3文字にBOMが付与されているため、
バッチ実行時、最初に挙げたエラーは発生しますがそれだけで済みます。

以上が対応方法になります。
参考になれば幸いです。

Discussion