2016-12-09 4 views
0

Ich versuche, die Option zum Ändern des Benutzernamens für die Einstellungen in einem meiner Batch-Dateiprogramme zu ändern Zeit "das ist seltsam, weil mein Code richtig scheint. Dies geschieht nach Eingabe eines Wertes für "cuser". Keiner der Werte, die ich für die Eingabe eingeben möchte, ist null, da ich die Werte am Anfang des Programms vordefiniert habe, um es so zu machen, dass ich keine Nullwertfehler hatte.Warum erscheint die CMD-Eingabeaufforderung "Set war zu diesem Zeitpunkt unerwartet"

: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 

Antwort

0

Sie versuchen Wert der Variablen zu setzen innen, wenn Block ohne delayed expansion und die, wenn sie mit falschen syntax.And analysiert wird, Sie haben eine nicht geschlossene Klammer ...

: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

Sie sind nicht die Verwendung von richtige Syntax für den if Befehl. Wenn Sie Strings vergleichen, verwenden Sie
if "%var1%"=="%var2%" zum Vergleichen. EQL NEQ usw. sind für den numerischen Vergleich.
Sie müssen nicht mehrere if Aussagen (eine für ja und eine für nein) haben, weil, Sie können davon ausgehen, dass, wenn sie nicht yes sagen, dann wollten sie Nein sagen. Hier ist ein verbessertes Skript für Sie, das keine verzögerte Erweiterung benötigt, um zu funktionieren. Hoffe das hilft.

: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. 
Verwandte Themen