Windows 批次:查询 wmic 计算机系统获取模型如果等于 true 继续 windows 批次

Windows Batch : query wmic computersystem get model if equals true continue with windows batch

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

    @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 语句,所以在这方面有点迷失。

非常欢迎任何帮助。

@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 删除值 returned 中的结尾回车 return(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
    )
)

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

所有@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