将字符串中的2个值与批处理文件进行比较



我有以下代码,它可以获取一组许可证的当前状态:

set licensefile="D:PLMSolid Edge ST10PreferencesSElicense.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

当然,这些值是可以改变的,但句子永远是一样的。如果5 >= 6,我希望批处理脚本返回一个错误。

我该怎么做

编辑:输出语句的结果为:

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:SEFlexProgramSELicense.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 . . .

如果我想知道你的数据到底是什么样子的,这可能会:

@echo off
set licensefile="D:PLMSolid Edge ST10PreferencesSElicense.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

我可能会使用以下代码来提取感兴趣的行以及从中提取的两个数字,并将它们分别存储到变量issuedused中,因此括号中表达式的确切位置或用另一种方式表示的前面单词的数量无关紧要:

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
)

相关内容

  • 没有找到相关文章

最新更新