in reply to Re: access to ERRORLEVEL on Win32
in thread access to ERRORLEVEL on Win32

If you're going to modify the program, you might as well just pass the errorlevel as a parameter.

>cmd /c exit 5 >echo %ERRORLEVEL% 5 >perl -le"print @ARGV" %ERRORLEVEL% 5

Replies are listed 'Best First'.
Re^3: access to ERRORLEVEL on Win32
by gkraus (Novice) on Jul 01, 2009 at 11:30 UTC
    Thanks for all your advice. Passing %ERRORLEVEL% as parameter is one workaround, but it would break the ease of implementation by using my script as filter. There obviously exits no way accessing %ERRORLEVEL% from perl without passing it as parameter, so things like
    cmd /c "make 2>&1 | perl vcproj_filter.pl"
    must be changed in batch file like
    make > output.txt 2>&1 perl %ERRORLEVEL% output.txt"
    Unfortunatly the following doesn't work:
    cmd /c "make > output.txt 2>&1 && perl %ERRORLEVEL% output.txt"
    It seems if you start more then one process using && or | ERRORLEVEL is not set for each process but only for the last one. That's why using my script in a pipe and reading %ERRORLEVEL% would never work. I finally use a seperate perl script from where I make the call to make via system() and gather the return code from $?. The output is filtered afterwards.

    Thanks for the help!

      Have you considered an interface like strace and (the unix) time?
      perl vcproj_filter.pl make all >output.txt 2>&1

      To launch the child, you'd use

      system { $ARGV[0] } @ARGV

      The down side of this method is that the output of make and vcproj_filter will get mixed together.