У меня есть следующая функция, которая работает следующим образом: Вы вводите строку, которая похожа на: 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 ответ1

1

Когда вы выполняете код точно так, как указано в вашем примере,
поток кода проходит через подпрограмму, потому что перед меткой goto :eof нет Exit /b или :afterchar чтобы предотвратить это.

Поскольку на этот раз аргументы не передаются в основной пакет, попробуйте выполнить:

echo | set /p="  =  "

вызывает ошибку. Вы увидите это, если выполните пакет с установленным 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .