gpt4 book ai didi

batch-file - 如何获取当前行号?

转载 作者:行者123 更新时间:2023-12-04 05:21:21 24 4
gpt4 key购买 nike

我正在尝试构建一个通用批处理文件,该文件可以用行号告诉错误,错误发生在哪里。
但是在代码中写入每个行号有点烦人。

在运行批处理文件时是否可以获取当前行号?
这样下面的代码可以工作吗?

@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%
)

最佳答案

总有办法...
我发现不是完美的解决方案,但是可以使用一个很好的解决方法。

我调用了一个函数,该函数使用findStr在自己的批处理文件(%~f0)中搜索函数参数<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
)

关于batch-file - 如何获取当前行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4609390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com