繁体   English   中英

Windows Batch:如果等于true,则查询wmic computersystem获取模型继续执行Windows Batch

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

寻找写一个脚本来查询wmic computersystem获取模型,如果该值为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

我通常可以使用脚本,但是从不使用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删除返回值中的结尾回车符( 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解决方案都可以使用。 但是您可以尝试一下。

@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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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