犬でもわかるバッチファイルの作り方〜よく使う汎用的なコマンドを覚えよう
入社して2か月目の頃、私はバッチファイルの作成に四苦八苦していました。あれから月日が経ち、当時に比べればずいぶんとバッチファイルを作るのにも慣れたものです。
そこで今回はバッチファイルを作る際によく使う汎用的なコマンドを、新人エンジニアの方々にご紹介します!
四苦八苦の記録
バッチファイル作成時によく使うコマンド4選
一口に「バッチファイル」と言ってもコマンドによって処理内容が違います。そんな中でも以下の4つのコマンドは、大半のバッチファイルに使用することが可能です。
- pause
- @echo off
- Rem
- [任意のファイル名].txt
・・・て並べられても細かい処理が分からないと何言ってるか分かりませんね。という訳で早速説明に入りましょう!
1. 一時停止だ!「Pause」コマンド
まず1つ目は「Pause」コマンドです。
このコマンドをバッチファイル内に記載すると処理をPauseの位置でストップさせることができます。
例えばこんな感じ
echo これでばっちり Pause echo バッチ作成 echo バッチグーな出来栄えです!
バッチファイルを実行するとコマンドプロンプト上に「これでばっちり」と表示されたところで処理が一時的にストップし、何かボタンを押すまで処理が再開されません。
はー?なんでわざわざ処理止めるのー?意味わかんなーい!
ふっふっふ・・・意外と処理の一時停止って便利なんですよ。
処理の確認をする時
エラーが発生しているバッチに対し処理の間に「Pause」を書き込みます。
echo これでばっちり Pause echo バッチ作成 Pause ekho バッチグーな出来栄えです! Pause
処理が成功したら「Pause」が実行されて一時停止、また成功したら一時停止・・・と繰り返されます。
そして処理にエラーがあればエラー内容が表示されて、本来自動で消えてしまう実行画面が「Pause」で止まってくれるので、原因の特定が可能となります。
ユーザーに確認を促したいとき
通常、バッチファイルは処理を最初から最後まで自動で実行されます。でも処理によっては途中でユーザー側で確認してほしい場合もあります。
そんな時に「Pause」を処理に挟むことで処理を一時中断し、ユーザーの任意のタイミングで処理を再開させることも可能となります。
もし「Pause」の状態で処理をキャンセルしたい場合は「Ctrl+C」キーを押すことで処理全体を終了させることが可能です。
2. 処理を隠すぜ!「@echo off」コマンド
2つ目は「@echo off」コマンドです。
このコマンドをバッチファイル内の冒頭に記載すると処理の結果のみが出力されるようになります。
実際に使用する場合ははこんな感じ
@echo off echo これでばっちり echo バッチ作成 echo バッチグーな出来栄えです! pause
これを@echo offが無い場合とある場合で比較してみましょう。
▼無いとこんな感じ
▼あるとこんな感じ
このように記載した処理の実行結果だけが出力されます。
でも処理内容も出力された方が安心なんですけどぉ
確かにバッチファイルの記載が少ないならそれでもいいでしょう。ただファイルの記載が多くなればなるほどいちいち処理が画面上に表示されると冗長に感じられますし、後述のコメントアウトした内容も出力されるため非常に見づらくなります。
そのためテスト時は外しておき、実際に使用する際はバッチファイル冒頭に「@echo off」コマンドを記載することをお勧めします。
3. コメントアウトだ!「Rem」コマンド
3つ目は「Rem」コマンドです。
このコマンドを文頭に記載するとその行全体をコメントアウトすることができます。
こんな感じに記載します。
@echo off Rem echo これでばっちり echo バッチ作成 echo バッチグーな出来栄えです! pause
コメントアウトされた行は無効化され、処理されずにスキップします。
今回の場合は本来「これでばっちり」という文章がコマンドプロンプト上に表示される処理が無効化されます。
えー!せっかく書いた処理を無効化するなんてぶっちゃけありえなーい!
いやいやこれが結構重要なんです。
処理を無効化するパターンとしては主に以下のケースがあげられます。
バッチファイル内でメモしたいとき
例えば
あなたはお客様からの依頼でバッチファイルを作成し、完成したものをお客様にご提供しました。そのバッチファイルはとても複雑な処理が含まれており、あなたの実力だけでは完成が難しく、いろいろな参考資料を見ながらなんとか作り上げたものです。
ところが1年後バッチファイルをもらったお客様環境で、バッチファイルが正常に動かなくなりました。お客様としては早急にバッチを使用したいため、作成者であるあなたにバッチの修正依頼が来ました。
依頼があったバッチの中身を確認しましたが、何せ作成は1年も前の話。内容なんて覚えていないため、どこがどんな処理かを一つ一つチェックしなくてはなりません。しかし、久しぶりに見たバッチはスパゲッティコード(※処理がこんがらがって分かり辛いコード)なせいで処理の確認すらも一苦労です。
お客様はバッチの修正完了を今か今かと待っています。バッチファイルを再作成をすることも考えましたが、今から作るには時間が足りません。
「あぁ、せめて処理の内容さえ・・・そう!処理の内容さえわかればもっと楽に修正できたのに」
ポツリとこぼれたあなたの悲しいつぶやきは誰の耳にも届かないまま空へと消えていきました。
なんてことが無いように、命令文の上に何の処理かをメモすることで後で修正する時に問題点を絞りやすくなります。
その他、バッチの修正箇所や指示内容をメモする時にも使えます。
エラーの原因特定をするとき
別の使用方法として、一時的に特定の処理を無効化することでそこが改善されれば最後まで処理できるのか、それとも他にも原因があるのか等の切り分けが可能となります。
「削除しちゃダメなの?」という声もあるでしょうが、消した後に実は無いと困る処理でした!となった際に再度書き直すのは面倒なので、「Rem」で一時的に処理の無効化をした方が安全です。
テスト中に実行してほしくない処理があるとき
他に考えられるケースとして、最終的な処理では必要な処理なんだけどテスト中に実行はしてほしくない処理がある場合に「Rem」で無効化して、必要な時に「Rem」だけを消すなんて使い方も可能です。
4. レッツ・リダイレクト!「> [任意のファイル名].txt」コマンド
4つ目は「> [任意のファイル名].txt」コマンドです。
このコマンドをバッチファイル内に記載すると処理の出力内容がコマンドプロンプト上ではなく、指定したテキストファイルに出力されます。
ちなみに対象のファイルが無い場合は自動で作成されます。
こちらも記載例を置いておきます。
@echo off echo これでばっちり> C:\log.txt echo バッチ作成> C:\log.txt echo バッチグーな出来栄えです!> C:\log.txt pause
上記のバッチを実行した結果が以下の画像です。
▼バッチの起動画面
コマンドプロンプト上には何も表示されず・・・
▼処理が出力されたテキストファイルの中身
代わりにテキストファイルに出力されます。
ねぇ!テキストファイルの中に最後の処理しか記載されていないんですけどぉ!
そうなんです。実は「> [任意のファイル名].txt」だと実行結果毎に上書きされてしまうのです。これはこれで役立つ場合もあるのでしょうが、もし処理内容を全て記録したいのであれば以下のように書き換える必要があります。
@echo off echo これでばっちり>> C:\log.txt echo バッチ作成>> C:\log.txt echo バッチグーな出来栄えです!>> C:\log.txt pause
このように「>> [任意のファイル名].txt」とすることで処理内容が対象のテキストファイルに追記されるようになります。
また現在の形式だとエラーが発生した場合には処理が記載されないという欠点があります。そんなこともあろうかとエラーの場合にもテキストファイルに出力されるように変更する記述があります。
@echo off echo これでばっちり>> C:\log.txt 2>&1 echo バッチ作成>> C:\log.txt 2>&1 ecko バッチグーな出来栄えです!>> C:\log.txt 2>&1 pause
これでバッチが何のエラーで処理に失敗しているかわかりやすくなりましたね!
最後に
「犬でもわかるバッチファイルの作り方」第3弾!いかがでしたでしょうか?
もちろん今回挙げたもの以外にもバッチでよく使う汎用コマンドはたくさんありますが、今回ご紹介したものを覚えるだけでもググンとレベルは上がります。
バッチはまだまだ使用機会が多いので、使いこなせるようにしましょう!