えっと。。。相談されました。バッチファイルからEXE呼び出してその中で、環境変数作れないか?って。。。
EXEの環境変数は、EXEの中という閉じたプロセスでデッドコピーが作られてしまい、そこで何をやっても親プロセスが影響を受けることはありません(子プロセスとして動く場合は、影響します)。
そのため、単純にはいかないんじゃない?と言ってたんですが、ふと。。。バッチファイルの中で処理できればいいんだから、バッチ作っちゃえばいいんじゃないの?というコロンブスの卵なやり方を思いついてしまいました。。。w
ということで、実証実験してみました。
実際に動かして確認とれてますが、プログラムは極限まで簡素なものになってます。
まずは、呼び出し元のバッチファイル。子のバッチファイルは、自分と同じフォルダにある setHogeHoge.exe を呼び出して環境変数設定バッチを出力してもらいます。
@ECHO OFF
SETLOCAL
REM setHogeHoge.exe を呼び出す。
ECHO HOGE=%HOGE%
REM %~DP0 で、このバッチファイルのディレクトリになる。
"%~DP0setHogeHoge.exe" "%TEMP%\SetHoge.bat"
CALL "%TEMP%\SetHoge.bat"
DEL "%TEMP%\SetHoge.bat"
ECHO HOGE=%HOGE%
呼び出されたEXEは…
#include <fstream>
int main(int argc, char* argv[])
{
std::fstream fs(argv[1], std::ios::in | std::ios::out | std::ios::trunc);
fs << "SET HOGE=HogeHoge" << std::endl;
fs.close();
return 0;
}
です。
ま、本番ではこれに、適切なエラー処理とか環境変数にセットするデータをそろえる処理とかが入るので、こんなに単純ではないでしょうけどw