2010-09-20 6 views
6

J'ai problème à propos de IF ELSE Command script batch ...SI problème AUTRE COMMANDE LOT

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 pour le moment.)

COMPLET Script Code:

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

Répondre

8

Vous pouvez simplifier cela à:

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

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

Les ELSE déclarations ne sont pas nécessaires. Puisque le bloc IF va sauter ailleurs, placer le second GOTO sur la ligne suivante ou dans un bloc ELSE devrait être équivalent.

De plus, vous avez besoin du premier deux-points lorsque vous définissez une cible GOTO, mais pas lorsque vous faites référence au nom cible dans l'instruction GOTO elle-même.

+1

En fait, s'il n'y a pas de code entre les deux blocs, vous pouvez le simplifier davantage et supprimer la ligne 'GOTO CHECKPASSACCT' et la ligne': CHECKPASSACCT'. – bta

+0

ne fonctionne toujours pas: (..... Rechercher le code de script complet ... – user453089

+0

Lorsque vous dites que cela ne fonctionne toujours pas, quelle erreur est-il vous donner et sur quelle ligne l'erreur se produit-elle? la même erreur puisque le '' '' '' '' n'existe plus – bta

14

Votre erreur a été générée par une erreur de 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: goto :somewhere commande doit être terminée par un saut de ligne.

+0

Si préférez @pipitas anser sur @bta car il est plus simple et ne pas à côté de la question du comportement "else". Les deux réponses sont bonnes. Juste une note de côté, mais j'ai remarqué un comportement étrange appelant 'goto' dans une boucle où il se branche sur une ligne directement au-dessus d'une instruction' if'. Dans ces cas, bizarrement, placer un 'echo nul> nul' ou quelque chose de similaire entre la destination et l'instruction' if' fonctionne comme un charme. – kikuchiyo

+0

Merci d'avoir donné une bonne raison au comportement. – Raligan

+2

Un peu en retard, mais la description est fausse. La syntaxe est correcte, il est absolument valable d'utiliser 'if '1" == "1" (goto: label1) ELSE (goto: label2) '. 'goto' n'a pas besoin d'une nouvelle ligne – jeb

0

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

+0

FAUX, le premier bloc parenthèse doit être utilisé ici pour construire un bloc de commande. Sans les parenthèses, ELSE ne peut pas être analysé (il fera partie de la commande 'goto') et le' IF' a échoué pour les conditions 'false ' – jeb

3

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

le problème est à

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

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

IF ==0 (GOTO :RESETROUTER) ELSE (

C'est une expression non valide .

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