web-dev-qa-db-fra.com

SI AUTRE problème, COMMAND LOT

J'ai un problème avec IF ELSE dans le script de batch de commandes ...

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 )

En commande:
Code:

(était inattendu à cette époque.

Code de script complet:

@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%
8
user453089

Vous pouvez simplifier ceci jusqu'à:

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

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

Les instructions ELSE ne sont pas nécessaires. Étant donné que le bloc IF sautera ailleurs, placer le deuxième GOTO sur la ligne suivante ou dans un bloc ELSE devrait être équivalent.

En outre, vous avez besoin du signe deux-points lorsque vous définissez une cible GOTO, mais pas lorsque vous faites référence au nom de la cible dans l'instruction GOTO.

11
bta

Votre erreur telle que vue provient d'un formatage incorrect. Ne mettez pas tout sur 1 ligne. Utilisez plutôt ceci:

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

La raison sous-jacente plus profonde est: La commande goto :somewhere doit être terminée par une nouvelle ligne.

16
Kurt Pfeifle

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

Le problème est à

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

Comme la variable i n'est pas définie, la ligne sera étendue à

IF ==0 ( GOTO :RESETROUTER ) ELSE (

C'est une expression invalide.

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

3
jeb

Vous n'avez pas besoin d'utiliser les parenthèses. En gros, vous dites au système "Si% user% est insertusername (" et demande "qu'est-ce que '(' est censé faire?)"

0
qq410219243