コマンドの出力を変数に割り当てようとしています。たとえば、現在のフラッシュバージョンを変数に設定しようとしています。私はこれが間違っていることを知っていますが、これは私が試したものです:
set var=reg query hklm\SOFTWARE\Macromedia\FlashPlayer\CurrentVersion>
または
reg query hklm\SOFTWARE\Macromedia\FlashPlayer\CurrentVersion >> set var
ええ、あなたが見ることができるように、私は少し迷います。すべての助けをいただければ幸いです!
メソッドはすでに考案されていますが、この方法では一時ファイルは必要ありません。
for /f "delims=" %%i in ('command') do set output=%%i
ただし、これには独自の例外と制限があると確信しています。
この投稿 にはこれを実現する方法があります
from(zvrba)最初に出力をファイルにリダイレクトすることで実行できます。例えば:
echo zz > bla.txt
set /p VV=<bla.txt
echo %VV%
プロセス出力を変数に直接割り当てることはできません。For/ Fループを使用して出力を解析する必要があります。
@Echo OFF
FOR /F "Tokens=2,*" %%A IN (
'Reg Query "HKEY_CURRENT_USER\Software\Macromedia\FlashPlayer" /v "CurrentVersion"'
) DO (
REM Set "Version=%%B"
Echo Version: %%B
)
Pause&Exit
PS:必要に応じて、使用されるregキーを変更します。
さて、ここでFor/Fを使用するためのより複雑なサンプル
:: Main
@Prompt -$G
call :REGQUERY "Software\Classes\CLSID\{3E6AE265-3382-A429-56D1-BB2B4D1D}"
@goto :EOF
:REGQUERY
:: Checks HKEY_LOCAL_MACHINE\ and HKEY_CURRENT_USER\
:: for the key and lists its content
@call :EXEC "REG QUERY HKCU\%~1"
@call :EXEC "REG QUERY "HKLM\%~1""
@goto :EOF
:EXEC
@set output=
@for /F "delims=" %%i in ('%~1 2^>nul') do @(
set output=%%i
)
@if not "%output%"=="" (
echo %1 -^> %output%
)
@goto :EOF
それをサブ関数:EXECに詰め込んだので、実装の厄介な詳細のすべてがメインスクリプトを散らかすことはありません。バッチチュートリアルがあります。注:コードについて:
echo %1 -^>...
ですので、他の方法では不可能だったエコー経由での出力を「>」できます。@if not "%output%"==""
は、ほとんどの一般的なプログラミング言語のように見えます-MSバッチに慣れていない場合、予想とは異なる可能性があります。最初に「@」を削除します。出力を調べます。変更してnot %output%==""
-再実行して、なぜこれが機能しないのかを検討してください。 ;)これは私のための仕事です
@FOR /f "delims=" %i in ('reg query hklm\SOFTWARE\Macromedia\FlashPlayer\CurrentVersion') DO set var=%i
echo %var%