繁体   English   中英

批处理脚本-将systeminfo命令的输出保存到变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM