Всегда есть способ ...
Я нашел не идеальное решение, но хороший обходной путь, который я могу использовать.
Я вызываю функцию, которая ищет собственный пакетный файл (%~f0
) с помощью findStr для параметра функции <uniqueID>
, так что это работает, только если эти <uniqueID>
действительно уникальны для всего пакета.
Номер белья получен из результата findstr /N
.
В этом примере:
6: call :getLineNumber errLine uniqueID4711 -2
Третий параметр -2
используется для добавления смещения к номеру белья, поэтому результат будет 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
)