TECH MEDIA

テックメディア


ノウハウ
batファイルの動作不良対策

人からもらったbatファイルがうまく動かない!?よくあるパターンと解決策

目次
  1. 01|はじめに
  2. 02|よくあるパターン
  3. 03|原因
  4. 04|どういったシチュエーションで発生するの?(余談)
  5. 05|実際に試してみた
  6. 06|さいごに

1. はじめに

皆さんは人からもらったbatファイルがうまく動かなかったり、人に渡したbatファイルが動かないといわれた経験はありませんか?
こういった現象にはいくつか原因がありますが、今回は一番よく起こるパターンの原因・対策を紹介します!

2. よくあるパターン

同期や友達の間で起こっているのを見かけたことが何度かありますが、
最も多かった原因は「改行コードがLFになっている」というパターンです。

3. 原因

Windowsで動作するbatファイルにはルールがあり

①改行コードがCRLFであること

②文字コードがShift-JISであること(日本語を含む場合)

といったルールがあります。
文字コードは最悪文字化けするだけなのでまだましですが、改行コードを誤ると正常な動作をしなくなる場合があります。
そのため人にあげたbatが動作不調の場合は改行コードをまず疑ってみてください!

4. どういったシチュエーションで発生するの?(余談)

あるあるで行くとgitです、gitはLinuxベースのため特に設定を変更していない場合はプッシュの際に自動的に改行コードがLFに変換されます。

あと最近見かけた中でこんなパターンもあるのか、、と感心したパターンがあり、
それがDiscordです。Discordは制限文字数を超えて送信しようとするとテキストファイルで送信しないか?という提案をしてきます。それに従って送信するとこちらもLFに変換されてしまうのでダウンロードして使おうとするとおかしな動作をするケースがあります。(貼り付けて送るのではなく、batファイルをそのまま添付すれば大丈夫です。)

5. 実際に試してみた

どうおかしくなるかを見るために、適当なコードをAIに吐かせて少し手を加えてみました。

内容は深く触れませんが、本来の動きで行くと
何か文字入力を受け付け

空文字でない場合はtxtファイル作成
空文字ならもう一度入力待ちに戻る

という何の意味もないコードです。

実行するとこのように入力待ちになります。

そしてbatの改行コードを無理やりLFに変換

そして実行すると、、、

画像ではわかりにくいですが、このエラーが超高速でターミナル上に流れ続ける無限ループに陥ってしまいました。。

今回は一例ですが、書いてあるコードによっていろいろなパターンの動作不良が起こります。

6. さいごに

よくあるパターンですが、初めて出会うと動いていたコードをほかの人に渡した途端動かなくなるなんて狐につままれたような感覚に陥ります。(私もはじめは正常に動いているものとWinMergeするまで気づけませんでした、、)

なので、改行コードには気を付けましょう!

RECRUIT 採用情報

「eビジネスに関わる全ての人を幸せにする」
私達とともに新たな時代をつくりませんか?