Set / p com erro de sintaxe inválido

0

Eu tenho a seguinte função que funciona assim: Você insere uma string que se parece com: text text=text assim: call :afterchar text text=text e sai com text=text em uma linha sem criar uma nova. Enquanto ele está funcionando corretamente, ele também gera "A sintaxe deste comando está incorreta" quando eu o executo pela primeira vez. Eu não entendo o que está provocando esse erro.

@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
    
por Mark Deven 28.07.2018 / 15:09

1 resposta

1

Quando você executa o código exatamente como determinado no seu exemplo,
O fluxo de código é executado na sub-rotina porque não há goto :eof ou Exit /b na frente do rótulo :afterchar para evitar isso.

Como não há argumentos passados para o lote principal desta vez, tente executar:

echo | set /p="  =  "

causa o erro. Você veria isso se você executasse o lote com o conjunto echo on

:: Q:\Test18\SU_1344049.cmd

call :afterchar text text=text

:: here belongs a termination
goto :eof

:afterchar
echo|set /p="  %2=%3  "
exit /b
    
por 28.07.2018 / 16:26