@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
)
)
或任何其他組合/風格更適合你的代碼,但你必須考慮到這個地方括號中的t很重要。左括號if
需要與if
命令位於同一行。 if
右括號必須與else
子句(如果存在)位於同一行。左括號else
需要與else
子句位於同一行。
喜MC ND,謝謝您的回答我嘗試了第一個選項,改爲「MODEL1」我的模式「DH55HC__」但我得到的是一個閃爍的光標 – 2015-04-01 11:03:53
@ErikRichardson,我已經直接複製並粘貼代碼在答案中,用我的電腦模型替換其中一個模型,它就可以工作。你做了什麼額外的改變? – 2015-04-01 11:10:23
奇怪我在其他一些機器上測試過它,它的工作原理非常感謝 – 2015-04-01 11:37:31