技術ブログを開設する
ログイン
もっと気軽にアウトプットできる技術ブログプラットフォーム

nyagos では、子プロセスのバッチファイルが変更した環境変数を取り込むのに

@call バッチファイル 引数1 引数2 …
@set ERRORLEVEL_=%ERRORLEVEL%
@(cd & set) > 一時ファイル名
@exit /b %ERRORLEVEL_%

といった踏み台バッチを毎回作っていた。

これはこれでコストなので、バッチファイルではなく、環境変数に踏み台コードを格納してみた。具体的には環境変数 NYAGOSCMDLINE に

call バッチファイル 引数1 引数2 … & set ERRORLEVEL_=!ERRORLEVEL! & (cd & set) > 一時ファイル名

といったテキストを格納し、これを

CMD.EXE /V:ON /C "%NYAGOSCMDLINE%"

という形で呼び出すようにした。

なぜ、環境変数に一旦保存するかというと、CMD.EXE に二重引用符を含むかもしれない文字列を渡す時、そのままだと簡単に誤動作するからである。

(このあたりはCMD /? で出てくるヘルプによると、オプションを調整すると回避できるはずなのだが、正直、意味不明で理解が難しい)

ただ、この方式だと、/V:ON オプションがつくので本命のバッチファイルの中で「!環境変数名!」という語句が遅延展開されてしまう。今のところ、これ解消する手立てがないのだなぁ。まぁ、これで誤動作することは滅多にないと思うんだが…うーむ

関連記事

この記事へのコメント

まだコメントはありません
0
@zetamattaの技術ブログ
0
このエントリーをはてなブックマークに追加