はここオーケーについてはを使用するためのいくつかのより複雑なサンプル/ 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実装のその厄介な詳細の全てはリットルしませんメインスクリプト。 だから、ちょっとしたバッチチュートリアルがあります。コード試合 注意」
- はコールを介して実行されたコマンドからの出力:EXEC コマンドは%出力%に格納されています。 バッチcmdはスコープを気にしないので、%output%はメインスクリプトでも使用できます。
- @先頭はちょうど装飾であり、コマンドラインのエコーを抑制します。それらをすべて削除して、ちょうど@echoをオフにすることができます。最初の行には本当に嫌です。しかし、このように私ははるかに良いデバッグを見つける。 装飾番号2はプロンプトです - $ Gです。::>私はを使用
- 代わりに〜1%でREM
- チルダ(〜)の最初の引数から引用符を削除することです
- それは、このようなコマンドプロンプトの外観作ることがあります - 2 ^> nulは抑制/破棄するためにありますstderrエラー出力。通常は2> nulで行います。まあ^バッチエスケープ文字は、リダイレクタ(>)を早期に解決することを避けています。少し後でスクリプトでsimulareを使用します:
echo %1 -^>...
^そこでは、他に何ができなかったかをエコーで出力することができます。 @if not "%output%"==""
での比較がほとんどの一般的なプログラミング言語のように見えても、(あなたがMSバッチに慣れていない場合は)期待したものと異なるかもしれません。最初は「@」を削除してください。出力を調べます。 not %output%==""
-rerunに変更し、これが機能しない理由を考えてください。 ;)
以下の回答が役に立たなかった場合は、Googleでリダイレクトを検索してください。 –
[Bash backticksのバッチ相当]の複製が可能です。(http://stackoverflow.com/questions/2768608/batch-equivalent-of-bash-backticks) –
実際に元のように見えます。 Windowsの変数でコマンド?](http://stackoverflow.com/q/108439/12892)。 –