我正在尝试将命令的输出分配给一个变量——例如,我正在尝试将当前的闪存版本设置为一个变量。我知道这是错误的,但这是我尝试过的:
set var=reg query hklm\SOFTWARE\Macromedia\FlashPlayer\CurrentVersion>
或者
reg query hklm\SOFTWARE\Macromedia\FlashPlayer\CurrentVersion >> set var
是的,正如你所看到的,我有点迷路了。任何和所有的帮助表示赞赏!
我正在尝试将命令的输出分配给一个变量——例如,我正在尝试将当前的闪存版本设置为一个变量。我知道这是错误的,但这是我尝试过的:
set var=reg query hklm\SOFTWARE\Macromedia\FlashPlayer\CurrentVersion>
或者
reg query hklm\SOFTWARE\Macromedia\FlashPlayer\CurrentVersion >> set var
是的,正如你所看到的,我有点迷路了。任何和所有的帮助表示赞赏!
已经设计了一种方法,但是这样您就不需要临时文件。
for /f "delims=" %%i in ('command') do set output=%%i
但是,我确信这有其自身的例外和限制。
这篇文章有一种方法可以实现这一点
from (zvrba) 你可以通过首先将输出重定向到一个文件来做到这一点。例如:
echo zz > bla.txt
set /p VV=<bla.txt
echo %VV%
您不能将进程输出直接分配给 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
PS:如果需要,更改使用的 reg 密钥。
好的,这里有一些更复杂的示例供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中,因此它所有令人讨厌的实现细节都不会乱扔主脚本。所以它有一些批量教程。注释'关于代码:
echo %1 -^>...所以 ^ 使得通过 echo 输出 '>' 成为可能,这是不可能的。@if not "%output%"==""看起来像大多数常见的编程语言 - 它可能与您预期的不同(如果您不习惯 MS-batch)。好吧,删除开头的“@”。研究输出。将其更改为not %output%==""-rerun 并考虑为什么这不起作用。;)这对我来说是工作
@FOR /f "delims=" %i in ('reg query hklm\SOFTWARE\Macromedia\FlashPlayer\CurrentVersion') DO set var=%i
echo %var%