magcupの日記

何でも引き付けるカップ、magcup

コマンドラインプログラムの出力結果を環境変数にセット

ついに長年の夢がかなった、、、。
昔から、TPとかDelphiで書いているプログラムの中でSetEnvとかSetEnvironmentVariableとかで、環境変数をセットしても、その当該プログラムの中だけで有効で、プログラムが終了するとその環境変数も消えてしまう、ということに悩み苦しんで、挙句の果てに中間ファイルに書き込むとか言うアホなことをやっていたが、二十年かかってついに解決した。これでシェルスクリプト内のプログラム間のデータの受け渡しが簡単に出来るようになる。ただし、Win2K/XP/7のみ。
やり方は簡単で、データを取り出したいコマンドラインprogramに、結果データを標準出力に吐かせるようにしておき、
for /f %z in ('program foo bar') do set env_var=%z
とすれば、env_varにprogramに引数 foo barを与えて実行させた結果がストアされる。あぁ、良かった良かった、ほっっとした。何と、三十数年ぶりに解決した。
例) for /f %z in ('attrib myprogram.pas') do set my_attrib=%z