[英]Batch Scripting - Saving the output of systeminfo command to a variable
我很难保存以下命令的输出,这使我将操作系统的名称保存为变量。
systeminfo | findstr /B /C:"OS Name"
我尝试使用如下所示的for循环,但是变量的值为OS
for /f %%i in ('systeminfo ^| findstr /B /C:"OS Name" ') do set vard=%%i
echo the operating system name 2 is %vard%
有人可以帮我这个忙吗? 我研究了其他方法,例如将输出写入临时文件,然后稍后再读回,但是我想实现这一目标而不必诉诸使用临时文件
@echo off
setlocal
set "vard="
for /f "tokens=1,2,* delims=: " %%i in ('systeminfo') do (
if "%%~i %%~j" == "OS Name" (
call :clean_spaces "%%~k"
goto :next
)
)
:next
echo the operating system name 2 is "%vard%"
exit /b
:clean_spaces
setlocal enabledelayedexpansion
set "string=%~1"
:loop
if "!string:~-1!" == " " (
set "string=!string:~,-1!"
goto :loop
)
endlocal & set "vard=%string%"
用冒号和空格定界。 不幸的是,令牌*
还获得了systeminfo
输出的尾随空格。
命名标签:trim_spaces
修剪从值后面的空格vard
商店。 它通过检查最后一个字符是否有空格来执行此操作,然后将其删除。 它一直循环,直到没有尾随空格为止。
要使用已发布代码中使用的慢速SystemInfo
方法,应使用已知的分隔符:
来分隔输出。
@Echo Off
For /F "Tokens=1* Delims=:" %%A In ('SystemInfo^|Find /I "OS Name"'
) Do Call :Sub %%B
Echo the operating system name 2 is %vard%
Pause
GoTo :EOF
:Sub
Set "vard=%*"
Exit /B
或者,您可以使用内置的WMI命令行WMIC.exe
。
@Echo Off
For /F "Skip=1 Delims=|" %%A In ('WMIC OS Get Name'
) Do For /F "Delims=" %%B In ("%%A") Do Call :Sub %%A
Echo the operating system name 2 is %vard%
Pause
GoTo :EOF
:Sub
Set "vard=%*"
Exit /B
或使用Reg.exe
从注册表中检索信息:
@Echo Off
For /F "Skip=2 Tokens=2*" %%A In (
'Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V ProductName'
) Do Set "vard=%%B"
Echo the operating system name 2 is %vard%
Pause
GoTo :EOF
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.