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
希望编写一个脚本来查询 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