2016-12-09 2 views
0

Я пытаюсь изменить параметр имени пользователя для параметров в одной из своих программ пакетных файлов, но он продолжает отображать сообщение типа «set was неожиданно в этом время ", что странно, потому что мой код кажется правильным. Это происходит после ввода значения для «cuser». Ни одно из значений, которые я вводил для ввода, является нулевым, так как я предварительно объявил значения в начале программы, чтобы сделать это, поэтому у меня не было ошибок с нулевым значением.Почему подсказка CMD о том, что «set был неожиданным в это время»

:uch 
cls 
echo. 
echo Are you sure you want to change your username? 
echo. 
echo [Y/N] 
echo. 
set /p input= 
if %input% EQU n goto set 
if %input% NEQ y goto uch 

:ucy 
cls 
echo. 
echo Enter your current username 
echo. 
set /p cuser= 
if %cuser% NEQ %username1% (
echo. 
echo Incorrect username. Please try again. 
echo Press any button to continue. 
echo. 
pause>null 
goto :ucy 
) 
if %cuser% EQU %username1% (
echo Please enter new username. 
echo. 
set /p nuser= 
echo Please enter again. 
echo. 
set /p nuser2= 
if %nuser2% EQU %nuser% set username1=%nuser% 
if %nuser2% EQU %nuser% goto ga1 
if %nuser2% NEQ %nuser% (
echo Usernames do not match. Please try again. 
echo Press any button to continue. 
echo. 
pause>null 
goto ucy 
) 
goto ucy 

ответ

0

Вы пытаетесь установить значение переменной внутри, если блок без delayed expansion и если анализируется с неправильным syntax.And у вас есть один незаконченный кронштейн ...

:uch 
cls 
echo. 
echo Are you sure you want to change your username? 
echo. 
echo [Y/N] 
echo. 
set /p input= 
if %input% EQU n goto set 
if %input% NEQ y goto uch 

:ucy 
cls 
echo. 
echo Enter your current username 
echo. 
set /p cuser= 
if %cuser% NEQ %username1% (
    echo. 
    echo Incorrect username. Please try again. 
    echo Press any button to continue. 
    echo. 
    pause>null 
    goto :ucy 
) 
setlocal enableDelayedExpansion 
if %cuser% EQU %username1% (
    echo Please enter new username. 
    echo. 
    set /p nuser= 
    echo Please enter again. 
    echo. 
    set /p nuser2= 
    if !nuser2! EQU !nuser! set username1=!nuser! 
    if !nuser2! EQU !nuser! goto ga1 
    if !nuser2! NEQ !nuser! (
     echo Usernames do not match. Please try again. 
     echo Press any button to continue. 
     echo. 
     pause>null 
     goto ucy 
) 

goto ucy 
0

Вы не используете правильный синтаксис команды if. При сравнении строк используйте
if "%var1%"=="%var2%" для сравнения. EQL NEQ и т. Д. Предназначены для численного сравнения.
Вам НЕ нужно иметь несколько операторов if (один для да и один для нет), потому что, вы можете предположить, что если они не сказали yes, тогда они хотели сказать «нет». Вот вам улучшенный скрипт, который не требует отсроченного расширения для работы. Надеюсь это поможет.

:uch 
cls 
echo. 
echo Are you sure you want to change your username? 
set /p input=[Y/N] 
if not "%input%"=="y" (goto ga1) 
::THEY WANT TO CHANGE THEIR USERNAME 
cls 
echo. 
set /p cuser=Enter your current username ^> 
if not "%cuser%"=="%username1%" (
echo. 
echo Incorrect username. Please try again. 
echo Press any button to continue. 
pause>NUL 
goto :uch 
) 
::THE USERNAME MATCHES 
echo. 
set /p nuser=Please enter new username. ^> 
echo. 
set /p nuser2=Please enter again. ^> 
if "%nuser2%"=="%nuser%" (set username1=%nuser% && goto ga1) 
echo Usernames do not match. Please try again. 
echo Press any button to continue. 
echo. 
pause>NUL 
goto uch 
:ga1 
:://DO SOME OTHER STUFF HERE AFTER THEY CHANGED THEIR NAME OR OPTED NOT TO. 
Смежные вопросы