TechNote

事務屋のおぼえがき

【以外によく使う】バッチから外部ファイル(txtやini)読み込んで値を取得する方法

いまだに使う機会があるバッチ。
下記はiniファイルからフォルダパスやファイル名などの設定値を引っ張る例。(※テキストファイル系ならなんでもよい)



まずは外部ファイル側。以下のようなsettings.iniを用意。

path1=\\server001\test\
filename1=template1.xlsx
path2=\\server002\test\
filename2=template2.xlsx

次にバッチ側。以下のような感じでiniファイルに書いた内容を取り出す。
delims=のところで区切り文字を"="に指定していて、「区切り文字"="としたときの1列目が"path1"である行の2列目の値を変数path1にセットする」というやり方。
一般的にはdelimsはカンマ等が多いと思うが、ユーザが触る可能性の高いiniファイル側に=を使っているためここでは区切り文字を=としている。

set exist_flg=0

for /f "delims==, tokens=1,2" %%a in (%~dp0settings.ini) do (if "path1"=="%%a" set path1=%%b)
for /f "delims==, tokens=1,2" %%a in (%~dp0settings.ini) do (if "filename1"=="%%a" set filename2=%%b)
for /f "delims==, tokens=1,2" %%a in (%~dp0settings.ini) do (if "path2"=="%%a" set path2=%%b)
for /f "delims==, tokens=1,2" %%a in (%~dp0settings.ini) do (if "filename2"=="%%a" set filename2=%%b)

rem ファイル存在確認
if exist %path1%%filename1% (
  echo OK
) else (
  echo NG
  set exist_flg=1
)
if exist %path2%%filename2% (
  echo OK
) else (
  echo NG
  set exist_flg=1
)
if %exist_flg% equ 1 (
  echo 不足ファイルがあるため処理を中断
  pause
  exit
)
rem Pythonスクリプトなどに値を渡す
cd /d %~dp0
d:\WPy64-31050\scripts\python D:\test.py %path1%%filename1% %path2%%filename2%