2013-04-24 9 views
38

コマンドの出力を変数に代入しようとしています。現在のフラッシュバージョンを変数に設定しようとしています。私は、これは間違っている知っているが、これは、私が試したものです:マクロメディア\コマンド出力をバッチファイルの変数に割り当てます。

セットVAR = REGクエリHKLM \ソフトウェア\のFlashPlayer \ CurrentVersionの>

または

REGクエリhklm \ソフトウェア\ Macromedia \ FlashPlayer \ CurrentVersion >> set var

ええ、私は少し失われています。すべての助けをいただければ幸いです!

+0

以下の回答が役に立たなかった場合は、Googleでリダイレクトを検索してください。 –

+0

[Bash backticksのバッチ相当]の複製が可能です。(http://stackoverflow.com/questions/2768608/batch-equivalent-of-bash-backticks) –

+0

実際に元のように見えます。 Windowsの変数でコマンド?](http://stackoverflow.com/q/108439/12892)。 –

答えて

79

方法はすでに、あなたは一時ファイルを必要としないが、このように考案されています。

for /f "delims=" %%i in ('command') do set output=%%i 

しかし、これは独自の例外と制限があると確信しています。

+0

恐ろしい、助けてくれてありがとう! – user2283234

+2

あなたの質問が解決した場合は、それを合格とマークしてください。 –

+2

上記のコマンドを実行した結果、 '%%私は今回は予期せぬものでした。理由は分かりません。 –

9

This postは、あなたが最初の出力をファイルにリダイレクトすることによってそれを行うことができます(zvrba) からこの

を達成するための方法があります。たとえば:

echo zz > bla.txt 
set /p VV=<bla.txt 
echo %VV% 
1

あなたが直接VARにプロセス出力を割り当てることはできません、あなたがのために/ 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 

http://ss64.com/nt/for_f.html

PS:場合に使用REGキーを変更します必要です。

1

はここオーケーについてはを使用するためのいくつかのより複雑なサンプル/ 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実装のその厄介な詳細の全てはリットルしませんメインスクリプト。 だから、ちょっとしたバッチチュートリアルがあります。コード試合 注意」

  1. コールを介して実行されたコマンドからの出力:EXEC コマンド%出力%に格納されています。 バッチcmdはスコープを気にしないので、%output%はメインスクリプトでも使用できます。
  2. @先頭はちょうど装飾であり、コマンドラインのエコーを抑制します。それらをすべて削除して、ちょうど@echoをオフにすることができます。最初の行には本当に嫌です。しかし、このように私ははるかに良いデバッグを見つける。 装飾番号2はプロンプトです - $ Gです。::>私はを使用
  3. 代わりに〜1%でREM
  4. チルダ(〜)の最初の引数から引用符を削除することです
  5. - それは、このようなコマンドプロンプトの外観作ることがあります
  6. 2 ^> nulは抑制/破棄するためにありますstderrエラー出力。通常は2> nulで行います。まあ^バッチエスケープ文字は、リダイレクタ(>)を早期に解決することを避けています。少し後でスクリプトでsimulareを使用します:echo %1 -^>... ^そこでは、他に何ができなかったかをエコーで出力することができます。
  7. @if not "%output%"==""での比較がほとんどの一般的なプログラミング言語のように見えても、(あなたがMSバッチに慣れていない場合は)期待したものと異なるかもしれません。最初は「@」を削除してください。出力を調べます。 not %output%=="" -rerunに変更し、これが機能しない理由を考えてください。 ;)
関連する問題