Ubuntu上のプログラムにバッチファイルでjobを投げる

もうすぐ正式リリースされるはずのBash on Ubuntu on Windows。ちゃんとしたUbuntuが入っているので、apt-getで計算化学プログラムを簡単にインストールできるのは以前書きましたが、ここにWindows側のbatファイルでjobを投げてみました。

@echo off
set filecount=0

echo ┌─────────────────┐
echo │NWChem 6.3 on Ubuntu on Windows 10│
echo └─────────────────┘

:start
if '%1'=='' goto end

rem Windows⇔Bash(Ubuntu)パス変換
rem 小文字変換参考URL:http://qiita.com/q1701/items/d81e51a64f41ca841da6#2-5
set input=%1
set drive=%input:~0,1%
set fpath=%~p1
set fname=%~n1
for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do call set drive=%%drive:%%i=%%i%%
set drive=/mnt/%drive%
set fpath=%fpath:\=/%
set bashpath=%drive%%fpath%%fname%

set /A filecount=%filecount%+1
echo 《 Job #%filecount% : %~n1 》
echo     start : %date% %time%
bash -c "nwchem %bashpath%.nw &> %bashpath%.log"
echo     finish : %date% %time%
echo.
shift
goto start

:end
pause
exit

コマンドプロンプト上からbashは呼び出せるので、-cでコマンドを投げます。UbuntuとWindowsではパスが異なるので(Ubuntu上では/mnt以下にWindowsの各ドライブがマウントされている)、パス変換のブロックを入れています。この例はNWChemですが、bash -c以下のダブルクオーテーション内を変えることで、他のプログラムにも応用が効きます。

リンクを作らずに実行ファイルを置くだけにしている場合は、そのフォルダまでWindows上で移動してからbashを起動すると、記述が簡略化できることもあります。例えばこんな感じで。

@echo off
set pridir=S:\priroda\linux

:start
if '%1'=='' goto end
set fullname=%~d1%~p1%~n1
cd /D %pridir%
copy %1 input.in > nul

set /A filecount=%filecount%+1
echo 《 Job #%filecount% : %~n1 》
echo     start : %date% %time%
bash -c "./mpiexec -np 6 ./p input.in output.out"
copy output.out %fullname%.out
del input.in /q
del output.out /q
echo     finish : %date% %time%
echo.
shift
goto start

:end
pause
exit

1 Trackbacks & Pingbacks

  1. ORCA ver.4.0.0リリース – pc-chem.info

Leave a Reply