设置/p 给出无效语法错误

设置/p 给出无效语法错误

我有以下函数,其工作原理如下:您输入一个类似于以下内容的字符串: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

相关内容