我有以下函数,其工作原理如下:您输入一个类似于以下内容的字符串:text text=text
如下所示:call :afterchar text text=text
它会在text=text
一行上输出,而不会创建新行。虽然它目前运行良好,但当我第一次运行它时,它还会输出“此命令的语法不正确”。我不明白是什么触发了这个错误。
@echo off
:read
shift
if "%1"=="" set err=2 & goto help
if "%2"=="where" goto where
set DB=%1.db
if not exist "C:\users\Public\Temp\%DB%" call :c 0c "Database not found: %2" & exit /b 1
setlocal EnableDelayedExpansion
set numline=0
for /f "tokens=1,2,3,4,5,6,7,8,9,10* delims=# skip=1" %%A in (C:\users\Public\Temp\%DB%) do (
set /a numline+=1
if not "%%A"=="" call :afterchar %%A
if not "%%B"=="" call :afterchar %%B
if not "%%C"=="" call :afterchar %%C
if not "%%D"=="" call :afterchar %%D
if not "%%E"=="" call :afterchar %%E
if not "%%F"=="" call :afterchar %%F
if not "%%G"=="" call :afterchar %%G
if not "%%H"=="" call :afterchar %%H
if not "%%I"=="" call :afterchar %%I
if not "%%J"=="" call :afterchar %%J
echo.
)
goto skpp
:afterchar
echo|set /p=" %2=%3 "
exit /b
:skpp
if %errorlevel%==0 call :C 0a "Success."
exit /b
答案1
当您完全按照示例中给出的方式执行代码时,代码流会运行到子程序中,因为标签前面
没有goto :eof
或可以防止这种情况发生。Exit /b
:afterchar
由于这次没有传递给主批处理任何参数,因此尝试执行:
echo | set /p=" = "
导致错误。如果您使用 set 执行批处理,则会看到此错误echo on
:: Q:\Test\2018\07\28\SU_1344049.cmd
call :afterchar text text=text
:: here belongs a termination
goto :eof
:afterchar
echo|set /p=" %2=%3 "
exit /b