将命令输出分配给批处理文件中的变量

时间:2013-04-24 22:57:13

标签: flash variables batch-file registry

我正在尝试将命令的输出分配给变量 - 就像在,我正在尝试将当前的flash版本设置为变量。我知道这是错的,但这是我试过的:

  

set var = reg query hklm \ SOFTWARE \ Macromedia \ FlashPlayer \ CurrentVersion>

  

reg query hklm \ SOFTWARE \ Macromedia \ FlashPlayer \ CurrentVersion>> set var

是的,你可以看到我有点失落。任何和所有的帮助表示赞赏!

5 个答案:

答案 0 :(得分:80)

已经设计了一种方法,但这种方式您不需要临时文件。

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

但是,我确信这有其自身的例外和限制。

答案 1 :(得分:9)

This post有一种方法可以实现这个目标

  

来自(zvrba)   您可以通过首先将输出重定向到文件来完成此操作。例如:

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

答案 2 :(得分:2)

您不能将进程输出直接分配给var,您需要使用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

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

PS:根据需要更改使用的注册码。

答案 3 :(得分:1)

好的,这里有一些更复杂的样本供 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 中,因此所有令人讨厌的实现细节都不会破坏主脚本。 所以它得到了一些批量教程。 注释&#39;关于代码:

  1. 通过调用执行命令的输出:EXEC 命令 存储在%output%中。 Batch cmd并不关心范围,因此%output%也可以在主脚本中使用。
  2. @ 开头只是装饰,并禁止回显命令行。你可以将它们全部删除,只是在第一行放一些 @echo 真的不喜欢。但是像这样我发现调试更好。 装饰二是提示 - $ G 。它的命令提示符如下所示 - &gt;
  3. 我使用 :: 代替 rem
  4. %〜1 中的波浪号(〜)是从第一个参数中删除引号
  5. 2 ^&gt; nul 可以抑制/放弃 stderr 错误输出。通常你会通过 2&gt; nul 来完成。那么 ^ 批处理转义字符就是避免早期解析重定向器(&gt;)。稍后在脚本中使用了一些模拟器:echo %1 -^>...所以^使得输出a&#39;&gt;&#39;通过回声还有什么是不可能的。
  6. 即使@if not "%output%"==""的比较看起来像大多数常见的编程语言 - 它可能与您预期的不同(如果您不习惯MS批处理)。好吧删除&#39; @&#39;在开始。研究输出。将其更改为not %output%=="" - 重新运行并考虑为什么这不起作用。 ;)

答案 4 :(得分:0)

这对我有用

@FOR /f "delims=" %i in ('reg query hklm\SOFTWARE\Macromedia\FlashPlayer\CurrentVersion') DO set var=%i
echo %var%