コマンドプロンプトと戦え(batを書こう)

研究室向け資料その3

研究では色々自動化しておいた処理がたくさんあります。(パラメータを少しずつ変えながらシミュレーション、先週とは違うモデルでもう一度解析など)手作業でごりごりと気合でやっても出来るんですが、先生の「あ、これこっちの条件でもやっといて」という一言でもう1,2徹夜確定してしまうのは避けたいですね。そこでバッチファイルを使って処理を自動化します。

バッチファイルとは

バッチファイル(Batch File)は、Windowsで複数の処理をまとめて実行する際に使われるプログラムファイルのことです。バッチファイルの中身は、基本的にコマンドプロンプトで実行できるコマンドを1行ずつ明記したものです。ファイル名の拡張子は、「.bat」とかなっていますが普通にメモ帳などで編集できます。(メモ帳から「開く」を使うか、batファイルを右クリックして編集)バッチファイルを書いたらあとはダブルクリックすれば書いてあることが一行一行実行されます。コマンドプロンプトで出来ることならだいたい何でもできます。例えば、「パラメータを少しずつ変えながらシミュレーションを回して結果を別のフォルダに格納」みたいなことが出来ます。

とりあえず覚えておきたいコマンド

コマンド 意味
md ディレクトリ(フォルダ)作成
rd ディレクトリ(フォルダ)削除
copy ファイルコピー
xcopy ディレクトリ(フォルダ)コピー
echo メッセージ表示
rem コメント
if/else ifとelse
for for文
^ 長くなったコマンドを改行する

困ったら help (コマンド名) か (コマンド名) /? でヘルプが見られます。ぐぐっても参考になるサイトがたくさんあると思います。

パラメータを変えながらプログラムを実行し、結果をMatomeフォルダに保存する例
プログラムはReleaseフォルダに入っているprogram.exeを実行するとします。

↓まとめディレクトリ消去(前の結果が残らないように)
rd .¥Matome

↓まとめディレクトリ作成
md .¥Matome

↓ 0から100まで 変数iを5ずつ増やしながらループ
for /l %%i in (0, 5, 100) do ( 

↓プログラム実行 引数%%iがargv[3]に格納される
.¥Release¥program.exe input.lst output.lst %%i 

↓ opt0, opt5, opt10のようにフォルダを作成
md .¥Matome¥opt%%i

↓answerの中身をoptフォルダの中にコピー
xcopy .¥answer ..¥Matome¥opt%%i¥ 

↓object_value.csvの最終行をopt_val_matome.csvに追記していく。
gawk -F “,” “{a = $1} END{printf(”%d,%f¥n“,%%i, a)}” .¥Matome¥opt%%i¥object_value.csv ^
>> ..¥Matome¥opt_val_matome.csv 
)
↓続行するには何かキーを押してください . . .状態にする
PAUSE 

という感じです。下矢印は説明用なので使うときはremをつけるか削除してください。
forの/lが面倒ですが、数字でループを回すときには必要なのでつけましょう。
ちなみにlオプションがない場合は

for %%i in (*.csv) do ( 

のような使い方になります。
どちらの場合も"("の前(あるいは")"の後)にはスペースが必要です。
doの後のスペースを忘れたりすると無言で落ちるので注意してください。
gawkについてはgawkの記事を、 最終行の>> ..¥Matome¥opt_val_matome.csvについてはパイプとリダイレクトの記事を参照してください。

CUIベースで操作を行えればこのように処理をコンピュータに伝わる形で保存することができます。コンピュータは言葉が分かるってところですね。
GUIは人間には分かりやすいのですが、上記のような処理手順の保存は難しく、気がつくと同じような処理を何回も手作業でこなす羽目になったりします。どっちが良いとかいうものでもないので、「おれはどっちでもいいけど」を目指して両方使えるようになりましょう。