技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

Windowsバッチの動きがおかしい場合に見直すポイント(文字コード、改行コード)

Windowsのバッチファイルは、特定の文字コードや改行コードを使用しないと上手く動きません。
具体的には、以下の文字コードや改行コードを用いる必要があります。
 
文字コードは「SJIS」を使用する(chcpコマンドで文字コードを変更しない場合)
・改行コードは「CRLF」を使用する
 
既存のファイルをコピーしてそれをベースにバッチファイルを作成するような時に、文字コードを誤ってしまうことが多いです。
また、FTPFFFTP)やGitを用いてサーバ間でファイルのやりとりをする時に、意図せずに改行コードが変わってしまうことも多いです。
既存のファイルをコピーしたり、サーバからバッチファイルを落としてきたりする場合には注意する必要があります。
 
以下では、文字コードや改行コードを誤るとどのように挙動が変わるのかを見ていきます。
文字コードを誤ると、2バイト文字(日本語等)の部分が文字化けします。フォルダ名やファイル名に2バイト文字が含まれていたり、データに2バイト文字が含まれていたりするような場合は、正常に動作しなくなります。
また、改行コードを誤ると、改行が無視されてコマンドが実行されます。通常のバッチファイルでは改行でコマンドを区切るため、コマンドを上手く区切られなくなり、正常に動作しなくなります。
 
【サンプル】
@echo off
echo こんにちは世界!
pause
 
文字コード・改行コードが正しい場合の動作】
こんにちは世界!
続行するには何かキーを押してください . . .
 
文字コードが「UTF-8」の場合の動作】
縺薙s縺ォ縺。縺ッ荳也阜・・
続行するには何かキーを押してください . . .
 
【改行コードが「LF」の場合の動作】
'ノちは世界!' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
続行するには何かキーを押してください . . .