SI d'AUTRE problème de COMMANDE par LOT
J'ai un problème sur SI d'AUTRE dans la Commande 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 la COMMANDE:
Code:
( c'était inattendu, à ce moment.
PLEIN de Code de 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%
OriginalL'auteur user453089 | 2010-09-20
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplifier ce vers:
La
ELSE
déclarations ne sont pas nécessaires. Depuis leIF
bloc de saut d'autre part, en plaçant le secondGOTO
sur la ligne suivante, ou dans unELSE
bloc doit être équivalent.Aussi, vous devez le leader du côlon lors de la définition d'un
GOTO
cible, mais pas lorsque l'on se réfère le nom de la cible à l'intérieur de laGOTO
déclaration elle-même.GOTO CHECKPASSACCT
et de la ligne de:CHECKPASSACCT
ligne.toujours pas de travail:..... Regarder complète le code de script...
Quand vous dites que ça ne fonctionne toujours pas, quelle est l'erreur s'il vous donner et quelle ligne l'erreur se produit sur? Il ne peut pas être la même erreur, puisque la délinquance
(
n'existe plus.Aussi, au sein de votre
:COUNTER
bloc, vous voulez probablement mettre%i%
en double-guillemets parce que vous pouvez le saisir à bloc avant dei
est jamais ensemble.L'ajout de guillemets résoudre l'erreur de syntaxe dans la ligne, mais votre logique est toujours en panne. La variable
i
doit être initialisée à certains valide à partir de la valeur de sorte que vous n'aurez jamais frappé le:COUNTER
bloc avant de définir explicitement. L'édition du fichier de commandes et de contrôle dans la même fenêtre de shell peuvent causer des variables commei
être ré-utilisés entre les courses, alors essayez d'ajouter des commandes commeset i=
en haut du fichier de commandes pour effacer toutes les anciennes données avant l'exécution du script (ce qui peut masquer variable non initialisée des problèmes comme celui-ci).OriginalL'auteur bta
De votre erreur, comme on le voit vient du mauvais formatage. Ne mettez pas tout sur 1 ligne. Au lieu d'utiliser ceci:
La plus profonde, la raison sous-jacente est:
goto :somewhere
de commande doit être terminée par un retour à la ligne.else
comportement. Les deux réponses sont bonnes. Juste une note de côté, mais j'ai remarqué un comportement étrange d'appelergoto
dans une boucle où elle se ramifie à une ligne directement au-dessus d'unif
déclaration. Dans ces cas, bizarrement, le fait de passerecho nul>nul
ou quelque chose de similaire entre la destination et leif
instruction fonctionne comme un charme.Merci de donner une bonne raison pour le comportement.
Un peu en retard, mais la description est erronée. La syntaxe est correcte, c'est absolument valide pour utiliser
if "1"=="1" (goto :label1) ELSE (goto :label2)
.goto
n'a pas besoin d'un retour à la ligneOriginalL'auteur Kurt Pfeifle
Le problème n'a rien à voir avec le code!
Le problème est au
Que la variable
i
n'est pas défini, la ligne sera étendue àC'est une défaillance de l'expression.
De trouver ce genre de syntaxe simple échoue, vous devez activer le débogage avec
ECHO ON
.OriginalL'auteur jeb
Vous n'avez pas besoin d'utiliser les parenthèses. Vous êtes essentiellement en disant le système
"si %utilisateur% est insertusername (" et il pose la question "qu'est-ce que le '(' censé faire?"
goto
de commande) et leIF
a échoué pourfalse
conditionsOriginalL'auteur qq410219243