- ベストアンサー
Excel VBAでbatファイルを実行し、環境変数を取得する方法はあるか?
- ExcelのVBAでbatファイルを実行し、環境変数を取得する方法について教えてください。
- batファイル内でセットした環境変数の値をVBA側で取得することは可能でしょうか?
- VBAでbatファイルを実行し、batファイルで設定した環境変数の値を取得する方法について知りたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Batファイル(仮に、e:\asd.bat)の中身を @echo off set aaa=fff echo %aaa% としておいて たとえば標準モジュールの場合ですが Sub CMDget() Dim wSh As Object, wExec As Object, Cmd As String, Result As String Set wSh = CreateObject("Wscript.Shell") Cmd = "e:\asd.bat" Set wExec = wSh.exec("%ComSpec% /c " & Cmd) Do While wExec.Status = 0 DoEvents Loop Result = wExec.StdOut.readall MsgBox Result Set wExec = Nothing Set wSh = Nothing End Sub とすればメッセージボックスに、fff と表示されます。 が、先の回答のように、Batファイルが終了した時点で、 SET した 環境変数は消えてなくなるので 使い道が無さそうに思えますけど? おしまい。
その他の回答 (1)
- NotFound404
- ベストアンサー率70% (288/408)
SET コマンドで作成した環境変数は、そのコマンドプロンプト上(メモリ)だけで 有効になっているようです。 一個目のコマンドプロンプトで、set zzz=fff とし set で zzz=fff が 返って来るのを確認。 もう一個コマンドプロンプトを立ち上げて SET としても先ほどの zzz=fff は返ってきません。 最初のコマンドプロンプトで再度試すと、しっかり有ります。 なのでEnviron関数でも、Wscript でも取得できないようです。 Batファイルを実行後にコマンドプロンプトを立ち上げて確認してもありませんでしたし。 調べたら SETX なるものがレジストリに登録できるようですけど未検証です。 私はこの辺で退却します。
お礼
ありがとうございます。 Excelでコマンドプロンプトを起動して、 その中の環境変数が覗ければいいんですけど、 覗けないんですかね……
お礼
ありがとうございます。 環境変数にSETしているbatファイルは他のbatファイルから呼び出されているので、下手に触れないのですが、もう1個batファイルを作って、環境変数にSETしているbatファイルをCALLしたあとで、必要な環境変数の値をECHOして標準出力に出力するか、リダイレクトしてテキストファイルに出力すれば、Excel側で拾えそうですね。 (a.bat) @echo off set aaa=fff set bbb=ggg (b.bat) @echo off call "~\a.bat" rem echoしたものをStdOutプロパティから拾う or リダイレクトしてテキストファイルから拾う echo %1 rem echo %1 > "~\hoge.txt" (VBA) ~(省略)~ Cmd="~\b.bat 環境変数名" Set wExec = wSh.exec("%ComSpec% /c " & Cmd) ~(省略)~