批处理文件将findstr输出中的数字放入IF语句的变量中?

时间:2019-02-28 14:58:38

标签: batch-file findstr

我有一个日志文件,其中的相关部分分别与findstr隔离,如下所示:

   22 removed
   0 updated

数字变化并且在它们前面有空格,我只想将数字放入变量中,以便我可以将它们与阈值进行比较,并以此为基础来继续或停止脚本。

SET removed_threshold=100    
SET updated_threshold=100

基本上,我希望脚本仅在日志文件中的两个数字都小于100时才继续。

问题是我一直处于起步阶段,因为我不可能将数字放入变量中。尝试通过类似问题在/ f中使用findstr in无效,即使具有完整路径,也找不到findstr或文件。

1 个答案:

答案 0 :(得分:0)

我的findstr comand仅从日志文件中选择包含关键字removedupdated的行,这些行之前带有至少一位数字[0-9][0-9]*的数字。

具有默认分隔符 space (忽略前导delims)的for /f "tokens=1,2"将数字存储在%%A中,将找到的关键字存储在%%B

这用于命令set "%%B_current=%%A"

为确保实际设置变量,首先需要清除并检查变量,然后才能比较不带引号的值。

:: Q:\Test\2019\02\28\SO_54928501.cmd
@Echo off
SET "Logfile=.\SO_54928501.Logfile"

:: clear vars
for %%A in (removed_ updated_) do for /f "delims==" %%B in ('
    Set %%A 2^>Nul
') do Set "%%B="

SET "removed_threshold=100"
SET "updated_threshold=100"

:: extract lines and set vars
For /f "tokens=1,2" %%A in ('
    findstr /I "[0-9][0-9]*.removed [0-9][0-9]*.updated" ^<"%Logfile%"
') do set "%%B_current=%%A"

if not defined removed_current (Echo removed_current not set & exit /B 1)
if not defined updated_current (Echo updated_current not set & exit /B 2)
if %removed_current% geq %removed_threshold% (
    Echo removed_current above treshold & exit /B 3)
if %updated_current% geq %updated_threshold% (
    Echo updated_current above treshold & exit /B 4)

Echo both values below treshold
set removed_
set updated_

带有上述日志数据的示例输出:

> Q:\Test\2019\02\28\SO_54928501.cmd
both values below treshold
removed_current=22
removed_threshold=100
updated_current=0
updated_threshold=100