3

I have a scheduled task that runs a batch file, and even though I can see the results of it completing successfully, according to the task scheduler it fails with error 0xff, every time.

I have other batch files scheduled that also complete successfully and return 0x0 as they should. The only difference I can see between these files is that the working ones end with:

IF ERRORLEVEL 1 (
    ("notify me" script here)
)

whereas the broken one ends with:

IF %2==something (
    (run a program here)
    IF ERRORLEVEL 1 (
        (same "notify me" script here)
    )
)

Does an IF block return 0xff if false or something? What's the deal?

masegaloeh
  • 18,236
  • 10
  • 57
  • 106
Kev
  • 984
  • 4
  • 23
  • 46

2 Answers2

7

The syntax you're looking for is:

IF "%2"=="SOMETHING" (

When %2 is empty, the line you have becomes:

IF ==SOMETHING (

That's invalid syntax. Putting the quotes in it makes it:

IF ""=="SOMETHING" (

That's valid.

Evan Anderson
  • 141,881
  • 20
  • 196
  • 331
0

After some testing, I figured out that IF blocks are okay, they don't seem to change the error level, but what was messing it up was the "%2==something"--the times that were failing, there was no second parameter being passed to the batch file. So I'm not sure how to "safely" test for whether a parameter exists (i.e., without it erroring out 0xff when it's not there) except maybe to have yet another IF ERRORLEVEL after that. But anyway, I just changed the scheduled task so it will always have a second parameter (whether it's "something" or not) and it seems to return 0x0 as it should now.

Kev
  • 984
  • 4
  • 23
  • 46