我有一个日志文件,其中的相关部分分别与findstr隔离,如下所示:
22 removed
0 updated
数字变化并且在它们前面有空格,我只想将数字放入变量中,以便我可以将它们与阈值进行比较,并以此为基础来继续或停止脚本。
SET removed_threshold=100
SET updated_threshold=100
基本上,我希望脚本仅在日志文件中的两个数字都小于100时才继续。
问题是我一直处于起步阶段,因为我不可能将数字放入变量中。尝试通过类似问题在/ f中使用findstr in无效,即使具有完整路径,也找不到findstr或文件。
答案 0 :(得分:0)
我的findstr comand仅从日志文件中选择包含关键字removed
或updated
的行,这些行之前带有至少一位数字[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