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

Eri*_*son 1 windows batch-file wmic

希望编写一个脚本来查询 wmic 计算机系统获取模型,如果该值是 true 则继续使用批处理文件如果不是 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
Run Code Online (Sandbox Code Playgroud)

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

任何帮助都将受到非常欢迎。

MC *_* ND 5

@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%]
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

其中条件执行操作用于确定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
Run Code Online (Sandbox Code Playgroud)

或者

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
    )
)
Run Code Online (Sandbox Code Playgroud)

或者

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
    )
)
Run Code Online (Sandbox Code Playgroud)

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