lisz-works

プログラミングと興味を貴方に

改行コードでバッチが狂った話。改行コードって?

【スポンサーリンク】

ソースコード バッチファイルを使っていますか?

サクッと決められた操作をしてほしい時、便利ですよね。

今回はバッチが改行コードのせいで狂ったというお話。

なにがあったの?

ぼくは個人のgitに、作成したバッチファイルを保存していました。

ある日、他の端末で編集したモノをPullして、使おうとしたらバッチファイルの挙動がおかしい

「???????」

悩みました。そして、悩みました。

原因

原因は改行コードにありました。

どうやら使っていたTortoiseGitの設定で、改行コードが「LF」になっていたようです。

これをCRLFに変更したらあっさり解決……

Windowsは、CRLFがベースの改行コードです。

メモ帳とかはまだ表示が狂ったりとかはしないようです。

しかしプログラムの区切り文字として使っている「改行」は、見えないけど中身が違う事で、コマンドプロンプトが区切りとして認識できないから狂うようです。

修正のしかた

改行コードを指定できるエディタで、置換してしまうのが一番早いと思います。

例えばサクラエディタ。

http://sakura-editor.sourceforge.net/download.html

Ctrl+Rで置換機能を呼び出します。

置換前:\n
置換後:\r\n

とします。

次に「正規表現」にチェックを入れます。

あとは「すべて置換」をすると、全ての改行コードが修正されます!

改行コードってなんなの?

余談です。

みなさんが「Enter」を押すと、文字が改行しますよね。

目には見えませんが、これは「改行コード」というのがテキストエディタに入力されています。

で、改行コードは世の中的に3種類使われているのです。

それが

  1. CR(キャリッジリターン)
  2. LF(ラインフィード)
  3. CR+LF

CRとLFというのがあり、この2種類の組み合わせで3種類なのです。

Windowsやmac OS、Linuxなど、OSによって採用している文字コードが違うんですね。

WindowsはCR+LFなので、LFだけだとバグってしまったというわけです。

ちなみに

  • CRが行を1つずらす
  • LFが行の先頭に移動

という意味合いです。

タイプライターの動きを表した感じですね。

あとがき

Gitの設定をちゃんと見とかないとダメですね。

もしかしたら設定とかなんやかんやで、勝手にすべて修正してくれたりするのかもしれません。