nologyance.net

日々のアウトプット

batスクリプト初心者におくる心得

新人SEあるある

配属されたプロジェクトで与えられる最初の仕事。 一体どんなスーパープログラムを開発するのかとワクワクしていると・・・

「まずはbatスクリプト作ってみよっか。」 「ばっしゅすくりぷと・・・?」

最低限ここに気を付けよう

batとかいうものを作ることになったあなたにお伝えする最初の心得は真似ること batが利用されているプロジェクトであれば、既に先人達が作ったbatがあるはず。 まずはそれらを覗いてみて参考にしよう。 コメントの入れ方や初期化の仕方、変数の命名規則など学ぶべきものは沢山あるはずだ。 そして今回自分が作ることになったbatに部分的に移植していく。 ちゃんと意味を理解してコピペすること、理解出来なかったら先輩たちに質問だ。

次の一歩

参考になるようなファイルがない or 自分がプロジェクトにおける先駆者となる場合に これから挙げる点について気を付けてほしい。きっと役に立つはずだ。

@echo offを書こう

これをbatの頭につけておくと実行時にいちいちbatの中身が出力されなくなる。 ほとんどの場合、必須と言っても良い。

使い方を書こう

別の人があなたの書いたbatを使う or 読むときに使い方を書いたコメントがあると非常に役に立つ。 次のような内容が頭のほうにコメントで書いてあると良い。

  • 何をするbatか
  • 引数を使う場合はその意味
  • その他注意事項など

cd ~dp%0

それぞれのコマンドの意味は自分で調べよう。 この一連のコマンドを書くとbatが実行された場所にかかわらず、 カレントディレクトリをbatが置いてある場所にすることができます。 つまり、実行場所を気にせずパスの指定が出来る。 初心者がよく見るエラーメッセージのtop3入り間違いなし 「そのようなファイル、ディレクトリは存在しません。」 「〇〇は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 にはこれでおさらば!

pushd ~dp%0

cd ~dp%0の応用編。 cdの代わりにpushdとするとカレントディレクトリを移動しつつ、 元々いたディレクトリをスタックにpushします。

popd

pushdの対になるコマンド。 スタックからディレクトリをpopして移動します。 batの頭のほうでpushd ~dp%0、最後のほうでpopdとすることでbatの実行中のみ、 カレントディレクトリをbatが置いてあるディレクトリに固定することが出来ます。 これがかなり重宝します。 bat単体で見るとそこまで効力がないように思えますが、 他のbatから自身が呼び出されたときに、 呼び出す側でカレントディレクトリを制御する必要がなくなってGood!

setlocal endlocal

環境変数のスコープをsetlocal~endlocalの間に閉じ込めます。 こちらも他のbatから呼ばれたときにより効力を発揮します。

exit /b

batの最後に書いておきましょう。 /bオプションがないと他のbatから呼ばれたときに呼び出し元のbatごと終了させてしまいます。

とりあえずこれだけあればなんとか

最低限の覚えておいたほうがよいbatスクリプトのtipsを並べてみました。 色んなコマンドがあるので徐々に覚えていきましょう。