【问题标题】:Windows Batch : query wmic computersystem get model if equals true continue with windows batchWindows Batch:如果等于 true,则查询 wmic 计算机系统获取模型继续使用 Windows 批处理
【发布时间】:2015-04-01 09:19:09
【问题描述】:

希望编写一个脚本来查询 wmic 计算机系统获取模型,如果值为 true,则继续使用批处理文件,如果不是,则 echo 不兼容的系统退出,这就是我目前所拥有的

    @echo off

        for /F "skip=1" %%? in ('wmic computersystem get model') do "(

      if %%?' equ Test' ('goto start') else (

      if %%?' equ test1' ('goto start') else (

      if %%?' equ test2' ('goto start') else (

      if %%?' equ test3' ('goto start') else (

      echo un-compatible System Exiting...>nul)))))"

:start

start of script

我通常可以编写脚本,但从未使用过 if 语句,所以在这方面有点迷失了。

我们将非常欢迎任何帮助。

【问题讨论】:

    标签: windows batch-file wmic


    【解决方案1】:
    @echo off
        setlocal enableextensions disabledelayedexpansion
    
        for /f "tokens=2 delims==" %%a in (
            'wmic computersystem get model /value'
        ) do for /f "delims=" %%b in ("%%~a") do for %%m in (
            "model1" "model2" "model3" "model4"
        ) do if /i "%%~b"=="%%~m" (
            set "model=%%~m"
            goto start
        )
    
        echo un-compatible system
        goto :eof
    
    :start
        echo Start of script for model [%model%]
    

    for 循环在哪里

    • %%a 检索模型
    • %%b 删除返回值中的结束回车符(wmic 行为)
    • %%m 遍历允许的模型列表

    如果任何允许的模型与使用wmic 检索到的模型匹配,则代码跳转到开始标签,否则,内部for 循环结束,并且找不到匹配项,脚本结束。

    这可以简化为

    >nul (wmic computersystem get model |findstr /i /l /c:"model1" /c:"model2" /c:"model3")||(
        echo un-compatible system
        goto :eof
    )
    echo compatible system
    

    其中条件执行操作用于判断findstr命令是否找不到任何模型并取消执行。

    当然,你可以使用if /else的级联,但语法有点不同

    for /f "tokens=2 delims==" %%a in (
        'wmic computersystem get model /value'
    ) do for /f "delims=" %%b in ("%%~a") do (
        if /i "%%~b"=="test1" goto start 
        if /i "%%~b"=="test2" goto start 
        if /i "%%~b"=="test4" goto start 
    )
    echo un-compatible system
    goto :eof
    

    for /f "tokens=2 delims==" %%a in (
        'wmic computersystem get model /value'
    ) do for /f "delims=" %%b in ("%%~a") do (
               if /i "%%~b"=="test1" ( goto start 
        ) else if /i "%%~b"=="test2" ( goto start 
        ) else if /i "%%~b"=="test3" ( goto start
        ) else (
            echo un-compatible system
            goto :eof
        )
    )
    

    for /f "tokens=2 delims==" %%a in (
        'wmic computersystem get model /value'
    ) do for /f "delims=" %%b in ("%%~a") do (
        if /i "%%~b"=="test1" ( 
            goto start 
        ) else if /i "%%~b"=="test2" ( 
            goto start 
        ) else if /i "%%~b"=="test3" ( 
            goto start
        ) else (
            echo un-compatible system
            goto :eof
        )
    )
    

    或任何其他更适合您的代码的组合/样式,但您必须考虑括号的位置很重要。 if 左括号需要与if 命令位于同一行。 if 右括号需要与else 子句(如果存在)位于同一行。 else 左括号需要与else 子句位于同一行。

    【讨论】:

    • 嗨 MC ND,感谢您的回答,我尝试了第一个选项并将“model1”替换为我的模型“DH55HC__”,但我得到的只是一个闪烁的光标
    • @ErikRichardson,我直接复制并粘贴了答案中的代码,用我的计算机模型替换了其中一个模型,它可以工作。您是否进行了任何其他更改?
    • 奇怪,我在我身边的一些其他机器上测试过它,它工作得很好,谢谢
    【解决方案2】:

    所有@MC ND 解决方案都有效。 不过你可以试试看。

    @echo off
    
    ::Defining the supported model
    set $test="935gcm-s2c" "45687-98a" "57687-sdf"
    
    for /f "tokens=2 delims==" %%a in ('wmic computersystem get model /value') do set "$Mod=%%a"
    for %%a in (%$test%) do if /i %%a=="%$mod%" goto:ok
    echo System not suppoprted
    exit/b
    
    :ok
    echo System supported 
    

    【讨论】:

    • 我的电脑型号是HP Compaq 8100 Elite CMT PC。也许你需要一些报价。
    猜你喜欢
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 2023-03-25
    • 2019-05-19
    • 1970-01-01
    • 2013-09-08
    • 2021-09-22
    • 1970-01-01
    相关资源
    最近更新 更多