パソコン困りごと掲示板
 ◇-?バッチファイルからINIファイルを読み込み処理-KMADMIN(初)-08/19-11:17(1426)-No.509951
   ┣?!Re:バッチファイルからINIファイ...-pandora-08/19-12:39(1425)-No.509952
   ┗?!Re:バッチファイルからINIファイ...-ZONE-08/19-20:38(1417)-No.509955
     ┗?!!Re:バッチファイルからINIファ...-KMADMIN-08/19-22:09(1415)-No.509956
       ┗?!!!Re:バッチファイルからINIファ...-ZONE-08/20-07:46(1406)-No.509957
         ┗?!!!!Re:バッチファイルからINIフ...-KMADMIN-08/21-08:41(1381)-No.509963
           ┗?!!!!!Re:バッチファイルからINIフ...-ZONE-08/21-18:29(1371)-No.509965

▲このページのトップに戻る
509951バッチファイルからINIファイルを読み込み処理KMADMIN(初) 2012/08/19-11:17

メーカー名:富士通
OS名:Windows7
パソコン名:XX
トラブル現象:インターネット全般その他
--
バッチファイルに関する質問です。

バッチファイルからINIファイルを読み込んで下記処理を行いたいのですが、
方法をご教授頂けませんでしょうか?

処理を行いたい内容

SETUP.BAT
設定値をSETUP.INIから参照し、条件を判断した上で
ファイルのコピーを行う。


SETUP.INI
;設定値
PARA=0 #・・・0〜9の数字

;処理(PARA=xの処理)
0=XXX1.DAT
1=XXX2.DAT
2=XXX3.DAT

9=XXX9.DAT

※PARA=0の時はXXX1.DATをコピー、PARA=1の時はXXX2.DATをコピー・・・


簡単な説明で申し訳ありませんが、よろしくお願い致します。

▲このページのトップに戻る
509952Re:バッチファイルからINIファイルを読み込み処理pandora 2012/08/19-12:39

記事番号509951へのコメント
KMADMIN(初)さんは No.509951「バッチファイルからINIファイルを読み込み処理」で書きました。

【INIファイルの定義読み出し方法】

例えば、INIファイルの内容がこんなだとして

; ---(実行管理用)-----------------------------------------------
;「ADMINCHK=YES」で、管理者権限診断をする
ADMINCHK=YES
;「AUTOLOGON=YES」で、Windows自動ログオンを有効にする
AUTOLOGON=NO
;「SHUTDOWN=YES」で、処理完了後にShutdown
SHUTDOWN=NO
;
; ---(デバッグ用)-----------------------------------------------
;「DBGMODE=YES」で、デバッグ実行モード
DBGMODE=NO
; --------------------------------------------------------------


具体的な取り出し方法は、こんな感じで

:: INIファイルの内容取り出し
IF EXIST %~n0.INI (
FOR /F "USEBACKQ EOL=; TOKENS=1,2 DELIMS==" %%A IN (%~n0.INI) DO (
FOR %%I IN (ADMINCHK AUTOLOGON SHUTDOWN DBGMODE) DO IF /I "%%A"=="%%I" SET %%I=%%B
)
)
ECHO ADMINCHK=%ADMINCHK%
ECHO AUTOLOGON=%AUTOLOGON%
ECHO SHUTDOWN=%SHUTDOWN%
ECHO DBGMODE=%DBGMODE%



INIファイルの構造がもっと複雑で、こんな形式のものでも凝れば出来ます。

[INFO]
VERSION=***
SOFTWARE=***
COMMENT=***

[LIST]
COUNT=3
1=AAA
2=BBB
3=CCC

[AAA]
DATA1=***
DATA2=***
DATA3=***

[BBB]
DATA1=***
DATA2=***
DATA3=***

[CCC]
DATA1=***
DATA2=***
DATA3=***



以上のように、変数に読み出せればコピー対象を変数で指示すればいいので、後は簡単でしょう。

参考文献
・コマンド・プロンプト・リファレンス
http://www.fpcu.jp/dosvcmd/index.htm

▲このページのトップに戻る
509955Re:バッチファイルからINIファイルを読み込み処理ZONE 2012/08/19-20:38

記事番号509951へのコメント
KMADMIN(初)さんは No.509951「バッチファイルからINIファイルを読み込み処理」で書きました。

あなたが考えたBATファイルの内容を書き出しましょう。
そして、それが期待通りに動作しないのか、問題があってそれを解決する方法が
知りたいのか具体的に質問してください。
そうすれば、あなたのスキル(レベル)に合わせて回答がもらえると思いますよ。

▲このページのトップに戻る
509956Re:バッチファイルからINIファイルを読み込み処理KMADMIN 2012/08/19-22:09

記事番号509955へのコメント
ZONEさんは No.509955「Re:バッチファイルからINIファイルを読み込み処理」で書きました。

ZONEさん
回答ありがとうございます。

具体的なコードはできておりません。というのも、質問の様な事ができるか、
まずそこをお尋ねしている次第です。

当方の考えていることは下記の通りです。

バッチファイルとINIファイルを用いて、環境設定を行いたい。
INIファイルに環境設定値及び環境設定値に対する条件を設定し
バッチファイルからINIファイルの設定情報を取得しバッチファイルを
実行させたいと考えております。


INIファイル
;設定値 (環境に合わせて0〜9を設定)
SETPARA=0

;条件設定
;SETPARAの設定値に応じて環境ファイルを指定
SETPARA0=XXXX_0.dat
SETPARA1=XXXX_1.dat
SETPARA2=XXXX_2.dat
SETPARA3=XXXX_3.dat
SETPARA4=XXXX_4.dat
SETPARA5=XXXX_5.dat
SETPARA6=XXXX_6.dat
SETPARA7=XXXX_7.dat
SETPARA8=XXXX_8.dat
SETPARA9=XXXX_9.dat

BATファイル
1.設定値を読み込む。
2.設定値に相応するファイルを指定フォルダにコピーする。
ex)SETPARA=0の場合、XXXX_0.datをコピーする。
3.対象プログラムを起動する。

XXXX_0.dat等の配置場所
⇒D:\APSETUP\INI\
XXXX_0.dat等のコピー場所
⇒C:\XXXX\INI

pandora様のコードを応用すればと思っているのですが、頭がかたいのか、
なかなか思いつきませんので、もう少し噛み砕いて説明いただけると
助かります。

以上、よろしくお願い致します!!

▲このページのトップに戻る
509957Re:バッチファイルからINIファイルを読み込み処理ZONE 2012/08/20-07:46

記事番号509956へのコメント
KMADMINさんは No.509956「Re:バッチファイルからINIファイルを読み込み処理」で書きました。

>pandora様のコードを応用すればと思っているのですが、

その通りです。
FOR文はいろいろなことができるために理解するのはちょっと難しいです。
でも、理解しないと先に進めません。

一切のエラー処理を省いたBATファイルを作成しましたので、動作確認のうえ
エラー処理を肉付けしてください。
--- ここから ---
@ECHO OFF
REM * iniファイルの「SETPARA=」行の値を変数(ini_SETPARA)に取り込む
FOR /F "tokens=1,2 usebackq delims==" %%a IN (`type "Setup.ini"`) DO (
IF %%a == SETPARA SET ini_SETPARA=%%b
)
REM * 変数(ini_SETPARA)の値(0〜9)に対応する
REM * iniファイルの「SETPARA0〜9=」行の値を変数(ini_SETPARAN)に取り込む
FOR /F "tokens=1,2 usebackq delims==" %%a IN (`type "Setup.ini"`) DO (
IF %%a == SETPARA%ini_SETPARA% SET ini_SETPARAN=%%b
)
REM * ファイルをコピー
COPY D:\APSETUP\INI\%ini_SETPARAN% C:\XXXX\INI
--- ここまで ---

肉付けが必要なエラー処理&対策
・iniファイルの存在有無チェック
・iniファイル内に「SETPARA=」行が存在しない場合や値が範囲外時の処理
・iniファイル内に「SETPARA0〜9=」行が存在しない場合や値が範囲外時の処理
・フォルダPATHに半角スペースが含まれる場合の対策
・ファイル名に半角スペースが含まれる場合の対策
・コピー元ファイルの存在有無チェック
・コピー先フォルダが存在しない場合の処理
・コピー先に同名ファイルが存在した場合の処理
・その他

▲このページのトップに戻る
509963Re:バッチファイルからINIファイルを読み込み処理KMADMIN 2012/08/21-08:41

記事番号509957へのコメント
ZONEさんは No.509957「Re:バッチファイルからINIファイルを読み込み処理」で書きました。

ZONE様

返事が遅くなりまして申し訳ありません。
頂きました内容を工夫することで対応することができました。
それと同時に、大変勉強になりました。ありがとうございます。

とりあえずですが、iniファイルの存在有無、iniファイル内の各パラメタの設定に
問題がある場合などのエラー処理を加えた次第です。

あと一点だけお聞きしたいのですが、フォルダPATHに半角スペースが含まれる場合の対策
ですが、iniファイルにこの内容を定義した場合、どのようにすればよろしいでしょうか?
半角スペースも区切りになっている様で、そこでデータが切れてしまいます。

よろしくお願いいたします。


▲このページのトップに戻る
509965Re:バッチファイルからINIファイルを読み込み処理ZONE 2012/08/21-18:29

記事番号509963へのコメント
KMADMINさんは No.509963「Re:バッチファイルからINIファイルを読み込み処理」で書きました。

>あと一点だけお聞きしたいのですが、フォルダPATHに半角スペースが含まれる場合の対策
>ですが、iniファイルにこの内容を定義した場合、どのようにすればよろしいでしょうか?

引数に半角スペースが含まれる場合は「"」で囲むだけです。
半角スペースが含まれなくても「"」で囲って問題ありません。
ただし、二重に囲むとエラーになります。
ex)iniファイルのファイル名を「"」で囲まない場合
 SETPARA3=XX XX_3.dat
 COPY "D:\AP SETUP\INI\%ini_SETPARAN%" "C:\XXXX\INI"
ex)iniファイルのファイル名を「"」で囲った場合
 SETPARA3="XX XX_3.dat"
 COPY "D:\AP SETUP\INI\"%ini_SETPARAN% "C:\XXXX\INI"
ex)エラーになるパターン
 SETPARA3="XX XX_3.dat"
 COPY "D:\AP SETUP\INI\%ini_SETPARAN%" "C:\XXXX\INI"

>3.対象プログラムを起動する。

あと、↑について回答してなかったので簡単に。
BATファイル内からプログラムを起動する方法は二通りあります。
#OSによって動作が異なることがありますので、必ず実行OSで動作確認すること。
1.起動したプログラムが終了するまで処理を待機させる起動方法
 ex)notepad.exe
2.起動したプログラムの終了を待たずに処理を続行する起動方法
 ex)start notepad.exe