【问题标题】:Windows batch - wmic computersystem get model - multiple modelsWindows 批处理 - wmic 计算机系统获取模型 - 多个模型
【发布时间】:2018-05-04 20:42:35
【问题描述】:

我有一个类似于Windows Batch : query wmic computersystem get model if equals true continue with windows batch的问题

我有一个使用 wmic 获取系统型号的批处理文件,需要根据型号运行脚本

这是我的脚本

REM @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 (
    "HP t520 Flexible Series TC" "HP t610 WW Thin Client" "HP t620 Quad Core TC" "HP t630 Thin Client"
) do if /i "%%~b"=="%%~m" (
    set "model=%%~m"
    goto start
)

echo un-compatible system
goto :eof
:start
echo Start of script for model [%model%]
if [%model%]==[t520] start "" "C:\SWSetup\APP\Scripts\t520.bat" "C:\SWSetup\APP\Scripts\t520-wmi.bat"
if [%model%]==[t610] start "" "C:\SWSetup\APP\Scripts\t610.bat" "C:\SWSetup\APP\Scripts\t610-wmi.bat"
if [%model%]==[t620] start "" "C:\SWSetup\APP\Scripts\t620.bat" "C:\SWSetup\APP\Scripts\t620-wmi.bat"
if [%model%]==[t630] start "" "C:\SWSetup\APP\Scripts\t630.bat" "C:\SWSetup\APP\Scripts\t630-wmi.bat"

这里是cmd窗口的输出

C:\SWSetup\APP\Scripts>setlocal enableextensions disabledelayedexpansion

C:\SWSetup\APP\Scripts>for /F "tokens=2 delims==" %a in ('wmic computersystem get model /value') do for /F "delims=" %b in ("%~a") do for %m in ("HP t520 Flexible Series TC" "HP t610 WW Thin Client" "HP t620 Quad Core TC" "HP t630 Thin Client") do if /I "%~b" == "%~m" (set "model=%~m"
goto start
)

") do for %m in ("HP t520 Flexible Series TC" "HP t610 WW Thin Client" "HP t620Quad Core TC" "HP t630 Thin Client") do if /I "%~b" == "%~m" (set "model=%~m"
goto start
)

C:\SWSetup\APP\Scripts>for %m in ("HP t520 Flexible Series TC" "HP t610 WW Thin Client" "HP t620 Quad Core TC" "HP t630 Thin Client") do if /I "HP t520 Flexible Series TC" == "%~m" (set "model=%~m"
goto start
)

C:\SWSetup\APP\Scripts>if /I "HP t520 Flexible Series TC" == "HP t520 Flexible Series TC" (set "model=HP t520 Flexible Series TC" 
goto start
)

C:\SWSetup\APP\Scripts>echo Start of script for model [HP t520 Flexible Series TC] Start of script for model [HP t520 Flexible Series TC] t520 was unexpected at this time.

C:\SWSetup\APP\Scripts>if [HP t520 Flexible Series TC]==[t520] start "" "C:\SWSetup\APP\Scripts\t520.bat" "C:\SWSetup\APP\Scripts\t520-wmi.bat"

我在这里错过了什么?

【问题讨论】:

  • 很明显,第三个for 循环正在输出一个完整的字符串,而不仅仅是tnnn 部分。因此,您需要调整第三个循环或进一步解析%model%%%m,以相应地对其进行优化。最简单的方法是更改​​您的 if 行:if not "%model:t520=%"=="%model%"...。总而言之,整个事情当然可以变得更短、更高效/简洁。

标签: batch-file for-loop if-statement


【解决方案1】:
@echo off
setlocal enableextensions disabledelayedexpansion
Set "Model="
for /f "tokens=2 delims==" %%a in (
    'wmic computersystem get model /value'
) do for /f "delims=" %%b in ("%%~a") do Set "Model=%%b"

If not defined Model (Echo Can't get Model&Pause&Exit/B 1)

Echo:%Model%|findstr /i "t520 t620 t630 t640" >Nul 2>&1 ||(Echo None of the specified models&Exit/B 1)

for %%m in (t520 t620 t630 t640
  ) do @Echo:%Model%|findstr /i "%%m"  >NUL 2>&1 && (
    start "" "C:\SWSetup\APP\Scripts\%%m.bat" "C:\SWSetup\APP\Scripts\%%m-wmi.bat"
)

【讨论】:

  • 这行得通我只需要在开始后的倒数第二行中删除以下内容“”
【解决方案2】:

这是一个未经验证的想法。

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
CD /D "C:\SWSetup\APP\Scripts" 2>Nul || Exit /B
Set "Model="
For /F "Tokens=2" %%A In ('WMIC ComputerSystem Get Model^|Find "HP"'
) Do Set "Model=%%A"
If Exist "%Model%.bat" If Exist "%Model%-wmi.bat" (
        Echo Start of script for model [%Model%]
        Call "%Model%.bat" "%Model%-wmi.bat")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-19
    • 2013-04-05
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多