Сравните 2 значения из строки с командным файлом - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть следующий код, который получает текущее состояние набора лицензий:

set licensefile="D:\PLM\Solid Edge ST10\Preferences\SElicense.dat"
set _output=lmutil lmstat -c %licensefile% -f "solidedgeclassic"
for /f "tokens=2 delims=()=" %%G IN ('%_output% ^|find "issued"') DO set line=%%G

Это, устанавливает% line% равным следующей строке:

Total of 6 licenses issued;  Total of 5 licenses in use

OfКонечно, эти значения могут быть изменены, но предложение всегда будет одинаковым.Я хотел бы, чтобы пакетный скрипт возвращал ошибку, если 5 >= 6.

Как я могу это сделать?

РЕДАКТИРОВАТЬ: Результатоператор _output:

lmutil - Copyright (c) 1989-2017 Flexera Software LLC. All Rights Reserved.
Flexible License Manager status on Thu 11/22/2018 09:05
[Detecting lmgrd processes...]
License server status: 27001@VIRT04
License file(s) on VIRT04: C:\SEFlex\Program\SELicense.dat:

VIRT04: license server UP v11.14.0

Vendor daemon status (on virt04):

 selmd: UP v11.14.0
Feature usage info:

Users of solidedgeclassic:  (Total of 6 licenses issued;  Total of 3 licenses in use)

  "solidedgeclassic" v110.0, vendor: selmd, expiry: permanent(no expiration date)
  floating license

    person1 PC-CAS016 PC-CAS016 (v110.0) (virt04/27001 1218), start Thu 11/22 8:00
    person2 PC-CAS09 PC-CAS09 (v110.0) (virt04/27001 599), start Thu 11/22 8:06
    person4 PC-CAS015 PC-CAS015 (v110.0) (virt04/27001 645), start Thu 11/22 8:51


Press any key to continue . . .

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Я бы, вероятно, использовал следующий код для извлечения интересующей строки и оттуда двух чисел и сохранения их в переменных issued и used, соответственно, так что точная позиция выражения между скобками или, выраженнаяиначе количество предыдущих слов не имеет значения:

for /f "tokens=2 delims=()=" %%G IN ('
    %_output% ^| findstr /R /C:"(Total of [0-9][0-9]* licenses issued;  *Total of [0-9][0-9]* licenses in use)"
') do (
    for /F "tokens=3,8" %%I in ("%%G") do (
        set "issued=%%I" & set "used=%%J"
    )
)

Для вывода сообщения об ошибке и завершения пакетного сценария со значением ErrorLevel, равным 1,например, сделайте это тогда:

if %used% geq %issued% (
    >&2 echo ERROR!
    exit /B 1
)
0 голосов
/ 22 ноября 2018

Если я получаю представление о том, как именно выглядят ваши данные, это может сделать:

@echo off
set licensefile="D:\PLM\Solid Edge ST10\Preferences\SElicense.dat"
set _output=lmutil lmstat -c %licensefile% -f "solidedgeclassic"

for /f "tokens=6,11" %%i in ('%_output% ^|find "issued"') do (
    if %%j geq %%i (
       echo Error %%j larger or equal %%i
     ) else (
       echo Success %%j less than %%i
   )
)
pause
...