ksaitoの日記

日々試したことの覚え書き

バッチファイルで実行結果を環境変数に格納する方法

移転しました。

自動的にリダイレクトします。

バッチファイルでコマンドの実行結果を環境変数に格納する方法です。
シェルだと下記のように書くだけで良いのでですが、バッチファイルの場合、なぜかfor文を使うようです。

$ export result=`ls`

for文には、/fオプションと"usebackq tokens=*"を付けると実行結果を環境変数に格納することができます。

C:\>ver

Microsoft Windows [Version 6.0.6001]

C:\>for /f "usebackq tokens=*" %i in (`ver`) do @set result=%i

C:\>echo %result%
Microsoft Windows [Version 6.0.6001]

C:\>

Windowsのどのバージョンから使えるか分からないのと、実行結果が複数行にまたがる場合、最後の行しか環境変数に格納されません。
下記のように、ちょっと悲しい結果になります。

C:\>for /f "usebackq tokens=*" %i in (`dir`) do @set result=%i

C:\>echo %result%
7 個のディレクトリ  100,982,059,008 バイトの空き領域

C:\>