将命令输出分配给batch file中的variables
我试图将一个命令的输出分配给一个variables – 在我试图将当前的Flash版本设置为一个variables。 我知道这是错的,但这是我所尝试过的:
设置var = reg查询hklm \ SOFTWARE \ Macromedia \ FlashPlayer \ CurrentVersion>
要么
reg query hklm \ SOFTWARE \ Macromedia \ FlashPlayer \ CurrentVersion >> set var
是的,你可以看到我有点失落。 任何和所有的帮助表示赞赏!
一个方法已经被devise出来,但是这样你不需要临时文件。
for /f "delims=" %%i in ('command') do set output=%%i
不过,我相信这有它自己的例外和限制。
这篇文章有一个方法来实现这一点
from(zvrba)你可以通过首先将输出redirect到一个文件来完成。 例如:
echo zz > bla.txt set /p VV=<bla.txt echo %VV%
你不能直接把一个过程输出分配给一个var,你需要用一个For / F循环来parsing输出:
@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
PS:如果需要,更改使用的注册码。
好的,这里有一些比较复杂的使用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中,所以它的所有讨厌的实现细节都不会抛弃主要的脚本。 所以它有一些有点批处理教程。 笔记'的代码:
- 通过调用:EXEC 命令执行的命令的 输出存储在%output%中 。 批cmd不关心作用域,所以%output%也可以在主脚本中使用。
- @开始只是装饰,并抑制回应命令行。 你可以删除它们,只是把一些@echoclosures在第一行是真的不喜欢的。 但是,像这样,我发现debugging更好。 装饰第二个是提示 – $ G。 在那里使命令提示符看起来像这样– >
- 我使用::而不是rem
- %〜1中的代字号(〜)是从第一个参数中删除引号
- 2 ^> nul是抑制/丢弃stderr错误输出。 通常你会通过2> nul来做。 那么^批处理转义字符就是避免早日解决redirect(>)。 有一些simulare在脚本稍后使用:
echo %1 -^>...
所以有可能通过回声输出一个'>'什么是不可能的。 - 即使比较在
@if not "%output%"==""
看起来像在最常见的编程语言 – 它可能不同于你的预期(如果你不习惯MS批处理)。 那么在开始时删除“@”。 研究输出。 将其更改为not %output%==""
rerun,并考虑为什么这不起作用。 ;)