Question

J'ai un problème à propos de IF ELSE Command script batch ...

Dans le Bloc-notes:
Code:

:CHECKACCOUNT
if /I "%user%"=="insertusername" ( GOTO :ACCOUNT ) ELSE ( GOTO :CHECKPASSACCT )

:CHECKPASSACCT
if /I "%pass%"=="insertpassword" ( GOTO :ACCOUNT ) ELSE ( GOTO :COUNTER )

Dans COMMAND:
Code:

  

(était inattendu à ce moment.

FULL code script:

@echo off

::SETTINGS:::::::::::::::::::::::
set filetxt =userpass.txt
set log=logfile.log
set timer=900
::set default = true
::set user = 0
::set pass = 0
:::::::::::::::::::::::::::::::::


:STARTER
ECHO.>>%log%
ECHO ========START========>>%log%
SetLocal EnableDelayedExpansion
Set n=
Set _InputFile=%filetxt%
For /F "tokens=*" %%I IN (%_InputFile%) DO (
Set /a n+=1
Set acct!n!=%%I
)
set router_ip=%acct1%
set user=%acct2%
set pass=%acct3%
GOTO :CHECKFILE1


:CHECKFILE1
CLS
IF EXIST curl.exe ( GOTO :CHECKFILE2 ) else (
ECHO ERROR: curl.exe was not found.>>%log%
ECHO ERROR: curl.exe was not found.
ECHO.
ECHO.
GOTO :PAUSEEXIT
)

:CHECKFILE2
CLS
IF EXIST sleep.exe ( GOTO :CHECKACCOUNT ) else (
ECHO ERROR: sleep.exe was not found.>>%log%
ECHO ERROR: sleep.exe was not found.
ECHO.
ECHO.
GOTO :PAUSEEXIT
)

:CHECKACCOUNT
if /I "%user%"=="insertusername" GOTO ACCOUNT
GOTO CHECKPASSACCT

:CHECKPASSACCT
if /I "%pass%"=="insertpassword" GOTO ACCOUNT
GOTO COUNTER

:ACCOUNT
CLS
::if %default% = true ( GOTO :COUNTER ) ELSE (
ECHO To edit/change USERNAME and PASSWORD... Please type: OPTION
ECHO.
SET /P user="Please enter the username of your Router:"
IF /I %user%==OPTION ( Goto :EDITBAT )
CLS
ECHO To edit/change USERNAME and PASSWORD... Please type: OPTION
ECHO.
SET /P pass="Please enter the password of your Router:"
IF /I %pass%==OPTION ( Goto :EDITBAT )
CLS
set /a i = 1
GOTO :CHECKACCOUNT
::)

:EDITBAT
start /WAIT notepad %filetxt%
set router_ip=%acct1%
set user=%acct2%
set pass=%acct3%
GOTO :CHECKACCOUNT

:COUNTER
IF %i%==0 ( GOTO :RESETROUTER ) ELSE (
ECHO WAIT %i% seconds...
sleep 1
set /a i = i - 1
CLS
GOTO :COUNTER
)


:RESETROUTER
CLS
ECHO READY to RESET....
ECHO Preparing....
sleep 2

sleep 2
CLS
ECHO Processing....
sleep 5

sleep 2
CLS
ECHO Success....
sleep 5
set /a i = %timer%
CLS
GOTO :COUNTER

:PAUSEEXIT
PAUSE

:EXIT
ECHO.>>%log%
ECHO ========END OF LOG FILE========>>%log%
Était-ce utile?

La solution

Vous pouvez simplifier cela à:

:CHECKACCOUNT
if /I "%user%"=="insertusername" GOTO ACCOUNT
GOTO CHECKPASSACCT

:CHECKPASSACCT
if /I "%pass%"=="insertpassword" GOTO ACCOUNT
GOTO COUNTER

Les déclarations de ELSE ne sont pas nécessaires. Étant donné que le bloc IF sautera quelque part ailleurs, en plaçant la deuxième GOTO sur la ligne suivante ou dans un bloc ELSE devrait être équivalent.

, vous devez également les deux points principaux lors de la définition d'une cible de GOTO mais pas en référence au nom de la cible dans l'instruction de GOTO lui-même.

Autres conseils

Votre erreur vu provient de mauvais formatage. Ne mettez pas tout sur 1 ligne. Utilisez plutôt ceci:

if /I "%user%"=="insertusername" (
     GOTO :ACCOUNT 
) ELSE (
     GOTO :CHECKPASSACCT 
)

La plus profonde, la raison sous-jacente est:. Besoins de commande goto :somewhere pour se terminer par un saut de ligne

Le problème n'a rien à voir avec le code affiché!

Le problème est à

:COUNTER
IF %i%==0 ( GOTO :RESETROUTER ) ELSE (

Comme on ne définit pas la i variable, la ligne sera étendue à

IF ==0 ( GOTO :RESETROUTER ) ELSE (

C'est une expression non valide.

Pour cette syntaxe simple, échoue, vous devez activer le débogage avec ECHO ON.

Vous n'avez pas besoin d'utiliser les parenthèses. Vous dites essentiellement le système « Si% utilisateur% est insertusername ( » et il demande « quel est le « ( » censé faire? »

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top