nyagos でのバッチ起動方法を軽量化した

公開日:2018-11-10
最終更新:2018-11-10

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
+1
@zetamatta'の技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする