好這裏使用的對於一些比較複雜的樣品/ 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 off在第一行真的不喜歡那個。但是,像這樣我發現調試更好。 裝飾二號是提示 - $ G。它的出現,使命令提示符看起來是這樣- >
- 我%使用::的代替REM
- 的符號(〜)〜1是從第一個參數
刪除報價 - 2 ^> NUL是有抑制/丟棄stderr的錯誤輸出。通常你會通過2> nul。那麼^批處理轉義字符是避免早日解決重定向(>)。在腳本中稍後會使用一些simulare:
echo %1 -^>...
因此,有可能通過echo來輸出'>',但其他方法不可能。 - 即使在比較
@if not "%output%"==""
看起來像最常見的編程語言 - 它也許不同的是您的預期(如果你不使用MS-批次)。那麼在開始時刪除'@'。研究輸出。將其更改爲not %output%==""
-rerun並考慮爲何這不起作用。 ;)
如果回答以下問題並沒有幫助,在谷歌搜索重定向。 [批量相當於猛砸反引號的]的 – 2013-04-25 21:25:19
可能重複(http://stackoverflow.com/questions/2768608/batch-equivalent-of-bash-backticks) – 2014-07-01 16:51:50
其實原來好像是[我如何獲得的結果命令在Windows中的變量?](http://stackoverflow.com/q/108439/12892)。 – 2014-07-01 16:54:55