-1

I have a log file with the relevant parts isolated with findstr separately, like this:

   22 removed
   0 updated

The numbers change and have spaces in front of them and I'd like to get only the numbers into variables so that I could compare them to a threshold and use that as a basis whether to continue or stop the script.

SET removed_threshold=100    
SET updated_threshold=100

Basically I want the script to only continue if both of the numbers in the log file are below 100.

Problem is I'm stuck in the beginning as I can't possibly put the numbers into variables. Trying to use findstr in for /f from similar questions doesn't work, it can't find findstr nor the file even with full path.

Tarhonyaa
  • 51
  • 1
  • 3
  • 3
    Please remember that we aren't on your PC and we only have the information you've posted. There is insufficient information there for us to build an environment which can replicate your issue, if we cannot do that, we'd simply be guessing. I would suggest that you post a [mcve] of the code you have and sufficient content from the log file, _(or preferably the command which outputs to the log file)_, for us to begin to assist you. – Compo Feb 28 '19 at 15:35
  • 1
    Show your findstr command, I suggest to enclose it into a `for /f` to directly parse the ouput and set vars with the current values. –  Feb 28 '19 at 15:35

1 Answers1

0

My findstr comand selects only lines from the logfile which contain the keyword removed or updated preceeded by a number with at least one digit [0-9][0-9]*.

The for /f "tokens=1,2" with the default delimiter space (ignoring leading delims) stores the number in %%A and the found keyword in %%B

This is used for the command set "%%B_current=%%A"

To assure the variables are actually set, they first need to be cleared and checked afterwards before the value without quotes can be compared.

:: 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_

sample output with your above log data:

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