Wie man die aktuelle Zeilennummer?
Ich versuche zu bauen, ein generischer batch-Datei sagen kann, Fehler mit Zeilennummer, wo der Fehler aufgetreten ist.
Aber schreiben jeder Zeile in dem code ist ein wenig nervig.
Ist es möglich, sich die aktuelle Zeilennummer, während ein batch-Datei ausgeführt wird?
So, dass der folgende code arbeiten kann?
@echo off
call :doSomething 1
if %errorlevel% GTR 0 (
REM Do something magic, to retrieve the lineNo
call :getCurrentLineNo currentLineNo
echo Error near %currentLineNo%
)
call :doSomething 2
if %errorlevel% GTR 0 (
call :getCurrentLineNo currentLineNo
echo Error near %currentLineNo%
)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist immer so...
Ich fand nicht die perfekte Lösung, aber ein guter workaround, den ich verwenden kann.
Rufe ich eine Funktion, durch welche Suchanfragen die eigene batch-Datei(
%~f0
) mit findStr, für die der parameter der Funktion<uniqueID>
, so funktioniert dies nur, wenn diese<uniqueID>
's sind wirklich einzigartig für die ganze Gruppe.Die linenumber ist vom Ergebnis
findstr /N
.In diesem Beispiel:
6: call :getLineNumber errLine uniqueID4711 -2
Den Dritten parameter
-2
wird verwendet, um ein offset zu der linenumber, so wird das Ergebnis4
./n /c:" %~2 "
(Raum-auf beiden Seiten-ID) mit einem übereinkommen, dass die IDs enthalten nie Leerzeichen. Sie wollen nicht "abc123" passend "zabc1234". Die option /C auch verhindert, dass so etwas wie "A. 1" interpretiert wird als regex. Auch die IDs sollten keine umgekehrten Schrägstriche zu vermeiden, entkommen Probleme mit FINDSTR, oder anderes suchen und ersetzen \ mit \\ im code.