ハムスターに飼われる院生のブログ

自分用メモが中心のブログです。

テキストファイルからコマンドライン引数を指定して実行し、はじめの引数ごとにフォルダ分けして出力するバッチファイル

exefile.exeという実行ファイルが6つのコマンドライン引数をとる状態での話。
このコマンドライン引数を変えて大量に計算したい場合、
インプットファイルの中に引数を記し、そこからコマンドライン引数を読み込んで実行することができる。
このためのバッチファイル(testbat.txt)を作成したので以下にメモしておく。

@echo off
setlocal enabledelayedexpansion

rem *****************************************************************

set /a num=0
set F=outputN.txt

for /f "tokens=1,2,3,4,5,6" %%a in (%1) do (
	
	set para1=%%a
	set para2=%%b
	set para3=%%c
	set para4=%%d
	set para5=%%e
	set para6=%%f

	call :DoCalc
	set /a num =!num! + 1
)

 goto :END
rem *****************************************************************

:DoCalc
	call :MakeDir
	echo execute_!num!
	call exefile.exe %para1% %para2% %para3% %para4% %para5% %para6% > para1_is_!para1!/%F:N=!num!%

:MakeDir
	set FilePath=para1_is_!para1!
	call :CheckFolderExistence %FILE_PATH%
	goto :END

:CheckFolderExistence
	if not exist %FilePath% (
	    mkdir %FilePath%
	    set /a num=0
	)
	goto :END

:END

インプットファイル名がinputfile.txtの場合、実行するときはコマンドプロンプトにて

testbat.bat inputfile.txt

と入力する。

これを実行すると、パラメータ1の値ごとにフォルダわけされて、その中にoutput0.txtから順に連番にて結果が出力される。
なお、インプットファイルの中身はn行6列の数字で、スペース区切りである。

※2018_07_25に修正
・インプット最終行の計算条件のみ2度計算が実行されるようになっていたため、その点を修正(rem****の前にgoto:ENDを挿入)