【问题标题】:Batch Scripting - Saving the output of systeminfo command to a variable批处理脚本 - 将 systeminfo 命令的输出保存到变量
【发布时间】:2018-07-17 05:29:01
【问题描述】:

我在尝试保存以下命令的输出时遇到了困难,这让我将操作系统的名称保存到一个变量中。

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%

有人可以帮我解决这个问题吗? 我查看了其他方法,例如将输出写入临时文件,然后稍后再读取,但我想在不使用临时文件的情况下实现这一目标

【问题讨论】:

  • 建议你在cmd的命令提示符下输入FOR /?,仔细阅读帮助文本。甚至还有一个如何提取特定令牌的示例。运行systeminfo | findstr /B /C:"OS Name" 的输出将是这样的:OS Name: Microsoft Windows .... 有多个由空格分隔的标记,您将需要在第二个标记之后的其余标记(Name:)

标签: windows batch-file


【解决方案1】:
@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 存储的值。它通过 检查最后一个字符是否为空格并将其删除。 它一直循环,直到不存在尾随空格。

【讨论】:

    【解决方案2】:

    要使用慢速 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      相关资源
      最近更新 更多