2008年7月24日木曜日

Windowsのバッチファイル、.bat, .cmd どっちを使うか

WindowsServerの運用管理においてバッチファイルは欠かせません。
集計、バックアップ、ファイルの転送やメール送信など手動でやるととても大変です。
 
さてバッチファイル、拡張子が".cmd"でも".bat"でもそれぞれ全く同じ動作をします。
それぞれ「Windows NT コマンド スクリプト」「MS-DOS バッチ ファイル」と定義されており、どう使い分ければよいのか。
結論から言うと…どっちでもよいようです。
 





[caption id="attachment_273" align="alignnone" width="150" caption="図:cmdファイルのプロパティ
クリックで拡大"]図:cmdファイルのプロパティ[/caption]
[caption id="attachment_276" align="alignnone" width="150" caption="図:batファイルのプロパティ
クリックで拡大"]図:batファイルのプロパティ[/caption]

 
cmdはWindowsNTで使い始めたらしいので昔は用途を分けるつもりでもあったのでしょうか、
しかし今日では全く区別されてないようです。
私は折角なので、バッチファイル群を自分が分かりやすくする為に使い分けています。
 
「バッチ処理※」という言葉から".bat"ファイルは複数のことを一括でまとめてやってもらう用途で使い、
".cmd"ファイルはまとめられる側の単発の処理をやらせています。
cmdはサブルーチンみたいな扱いですね、batの中でforループでまわしてcmdを連続で呼ぶとか。
 
memo:バッチ処理
処理すべきことをためておいて一括で実行するという用途で使用される。
コンピュータがそういった処理形態しか取れなかった頃(1950年代?)から使われています。

 
まとめ (あくまで個人的に定義した使い分け方です、一般にはどう使っても問題ありません。)
".cmd"ファイル → 単体で簡単な処理をして終わるスクリプト
".bat"ファイル → 開始処理をして幾つかのcmdファイルを呼ぶスクリプト、終了処理もする
 
 
ちなみに"a.bat"と"a.cmd"があるフォルダで"a"と実行すると.batが優先されます、
環境変数PATHEXTで出てくる順が優先度です。
 
 
 
memo:
この記事でWindowsのスクリーンショットを使ってますが、マイクロソフトはこういった使い方のガイドラインを定めています。
参考リンク:マイクロソフトの著作物の使用について
後でこういったメモはサイトのどこかにまとめておかないと…