Si le problème AUTRE COMMANDE DU LOT
-
04-10-2019 - |
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%
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? »