プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
Windowsバッチファイル(.bat)、コマンドの実行結果を環境変数に格納する
まず最初に、こちらのページを丸パクリさせていただいてφ(--)

■「西海岸より」様:バッチファイルで環境変数にコマンドの実行結果を格納(複数行)
http://mmasashi.hatenablog.com/entry/20100207/1265557400

こんなんすれば、行けましたφ(--)

@echo off
setlocal enabledelayedexpansion

set RESULT=

REM 「dir」の部分が実行するコマンド
for /f "usebackq tokens=*" %%i in (`dir`) do (
    set RESULT=!RESULT!^

%%i
)

echo !RESULT!

pause

endlocal

ありがたや~(-人-)

……で終われば話は早いのですが、
実は今回は「複数行の実行結果を一行にまとめる」必要がありましてね。

改行コードの除外って面倒くさそうだな~(--;と思ったのですが、
そもそもが改行コードは後付けでした。

というわけで

    set RESULT=!RESULT!^

%%i

の部分を

    set RESULT=!RESULT!%%i

に変えて

@echo off
setlocal enabledelayedexpansion

set RESULT=

for /f "usebackq tokens=*" %%i in (`dir`) do (
    set RESULT=!RESULT!%%i
)

echo !RESULT!

pause

endlocal

としたら、結果が全部一行にまとまって環境変数に格納されるようになりました。

ありがたや~(-人-)

ちなみに、コマンド部分はバッチファイルでも大丈夫でしたよ。
例えばこんなバッチファイルを実行するとφ(--)

■test01.bat
@echo off
setlocal enabledelayedexpansion

set RESULT=

for /f "usebackq tokens=*" %%i in (`call test01_sub.bat`) do (
    set RESULT=!RESULT!%%i
)

echo !RESULT!

pause

endlocal

■test01_sub.bat
@echo off

echo aaa
echo bbb

exit /b 0

こんな結果になりますφ(--)

aaabbb
続行するには何かキーを押してください . . .

見て分かると思いますが、本来画面に表示されるべき内容が環境変数に入ります。
終了コードではないのでご注意ください。

そして、改めてechoしない限り、画面には表示されません。
これを利用すれば、実行結果を読み捨てることもできそうですね。

例えば

■test02.bat
@echo off
setlocal enabledelayedexpansion

call test02_sub.bat

pause

endlocal

■test02_sub.bat
@echo off

echo test02_subの実行結果だよ~

exit /b 0

の状態でtest02.batを実行すると、画面上には

test02_subの実行結果だよ~
続行するには何かキーを押してください . . .

と表示されてしまいます。
callしたtest02_sub.batの実行結果が表示されちゃうのですね。
これを

@echo off
setlocal enabledelayedexpansion

REM call test02_sub.bat
for /f "usebackq tokens=*" %%i in (`call test02_sub.bat`) do (
    set RESULT=!RESULT!%%i
)


pause

とすることで、test02_sub.batの実行結果を読み捨てることができます。

使い道が有るような無いような、微妙な感じですかね(^^;

取りあえず、そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:コマンド/バッチ  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事