例えば、バッチファイルのステートメントの出力を変数に設定することはできますか?
findstr testing > %VARIABLE%
echo %VARIABLE%
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%
私はいつもUSEBACKQを使っています。これは、挿入する文字列や長いファイル名がある場合に、コマンドを台無しにすることなくダブルクォートを使用できるようにするためです。
また、出力が複数行になる場合は、次のようにします。
SETLOCAL ENABLEDELAYEDEXPANSION
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var!count!=%%F
SET /a count=!count!+1
)
ECHO %var1%
ECHO %var2%
ECHO %var3%
ENDLOCAL
このスレッド](http://www.tomshardware.com/forum/230090-45-windows-batch-file-output-program-variable)をインターウェブで見つけました。結論から言うと
@echo off
setlocal enableextensions
for /f "tokens=*" %%a in (
'VER'
) do (
set myvar=%%a
)
echo/%%myvar%%=%myvar%
pause
endlocal
また、コマンドの出力を一時ファイルにリダイレクトして、その一時ファイルの内容を変数に入れることもできます。
cmd > tmpFile
set /p myvar= < tmpFile
del tmpFile
Tom's Hardwareのスレッドにクレジットを掲載しています。
このようにしてテストしたところ、うまくいきました。
SET /P Var= | Cmd
コマンドを変数にパイプすることにより、プロンプトはコマンド "Cmd
"の結果を変数 "Var
"に挿入します。
更新:
動作しません。私のミスです。私が行ったスクリプトは次のようなものでした。
SET /P Var= | dir /b *.txt
echo %Var%
実際には、例えば "test.txt
"を表示していましたが、実際には、echo %var%
ではなく、"dir /b *.txt
"コマンドの結果を表示していました。どちらの出力も同じだったので混乱してしまいました。