好这里使用的对于一些比较复杂的样品/ 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