How to get the current line number?

后端 未结 1 539
遥遥无期
遥遥无期 2020-12-16 02:20

I\'m trying to build a generic batch file that can tell errors with a line number, where the error occours.
But writing each line number in the code is a little bit anno

相关标签:
1条回答
  • 2020-12-16 02:43

    There is always way...
    I found not the perfect solution, but a good workaround I can use.

    I call a function which searches the own batch file(%~f0) with findStr, for the function parameter <uniqueID>, so this works only if these <uniqueID>'s are really unique for the whole batch.
    The linenumber is get from the result of findstr /N.

    In this sample:
    6: call :getLineNumber errLine uniqueID4711 -2

    The third parameter -2 is used to add an offset to the linenumber, so the result will be 4.

    @echo off
    SETLOCAL EnableDelayedExpansion
    
    dir ... > nul 2> nul
    if %errorlevel% NEQ 0 (
        call :getLineNumber errLine uniqueID4711    -2
        echo ERROR: in line !errLine!
    )
    
    set /a n=0xGH 2> nul
    if %errorlevel% NEQ 0 (
        call :getLineNumber errLine uniqueID4712    -2
        echo ERROR: in line !errLine!
    )
    goto :eof
    
    :::::::::::::::::::::::::::::::::::::::::::::
    :GetLineNumber <resultVar> <uniqueID> [LineOffset]
    :: Detects the line number of the caller, the uniqueID have to be unique in the batch file
    :: The lineno is return in the variable <resultVar> add with the [LineOffset]
    SETLOCAL
    for /F " usebackq tokens=1 delims=:" %%L IN (`findstr /N "%~2" "%~f0"`) DO set /a lineNr=%~3 + %%L
    ( 
      ENDLOCAL
      set "%~1=%LineNr%"
      goto :eof
    )
    
    0 讨论(0)
提交回复
热议问题