Windows 批处理脚本-将systeminfo命令的输出保存到变量
我很难保存以下命令的输出,这会将操作系统的名称保存到一个变量中Windows 批处理脚本-将systeminfo命令的输出保存到变量,windows,batch-file,Windows,Batch File,我很难保存以下命令的输出,这会将操作系统的名称保存到一个变量中 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% 有人能帮我解决这个问题吗? 我研究了其他方法,例如将输出写入一个临时文件
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关闭
对于/F“Tokens=1*Delims=:”%%A In('SystemInfo^ | Find/I“OS Name”'
)Do Call:Sub%%B
回显操作系统名称2为%vard%
暂停
后藤:EOF
:Sub
设置“vard=%*”
退出/B
或者,您可以使用内置的WMI命令行,WMIC.exe
@Echo关闭
对于('WMIC OS Get Name'中的/F“Skip=1 Delims=|”%%A
)为/F“Delims=“%%B In”(“%%%A”)执行Do调用:Sub%%A
回显操作系统名称2为%vard%
暂停
后藤:EOF
:Sub
设置“vard=%*”
退出/B
或者使用Reg.exe
从注册表中检索信息:
@Echo关闭
对于/F“跳过=2个令牌=2*”%%A(
“注册查询”HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion“/V ProductName”
)不设置“vard=%%B”
回显操作系统名称2为%vard%
暂停
后藤:EOF
我建议您在cmd的命令提示符中键入FOR/?
,然后仔细阅读帮助文本。这里甚至有一个如何提取特定令牌的示例。运行systeminfo | findstr/B/C:“操作系统名称”
的输出如下:OS Name:Microsoft Windows….
有多个由空格分隔的令牌,您将需要第二个令牌(名称:
)后的剩余令牌可能重复