J'ai un problème sur si sinon dans le script de commandes de commandement ...
dans le bloc-notes:
CODE: P>
@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%
4 Réponses :
Vous pouvez simplifier cela jusqu'à:
:CHECKACCOUNT if /I "%user%"=="insertusername" GOTO ACCOUNT GOTO CHECKPASSACCT :CHECKPASSACCT if /I "%pass%"=="insertpassword" GOTO ACCOUNT GOTO COUNTER
En réalité, s'il n'y a pas de code entre les deux blocs, vous pouvez le simplifier plus loin et supprimer le goto checkpassacct code> ligne et la ligne
: checkpassacct code> ligne.
Lorsque vous dites que cela ne fonctionne toujours pas, quelle erreur vous donne-t-il et quelle ligne est l'erreur? Il ne peut pas être la même erreur, car le incriminé ( code> n'existe plus.
En outre, dans votre bloc : compteur code>, vous souhaitez probablement mettre
% i% i% code> en guillemets car vous pouvez entrer ce bloc avant
i code> est jamais défini.
L'ajout de guillemets résoudra l'erreur de syntaxe dans cette ligne, mais votre logique est toujours cassée. La variable i code> doit être initialisée à une valeur de démarrage valide afin que vous n'alliez jamais toucher le bloc
: compteur code> avant de le définir explicitement. Modification du fichier de commandes et le ré-test dans la même fenêtre de shell peut provoquer des variables telles que
i code> pour être réutilisée entre les exécutions, alors essayez d'ajouter des commandes telles que
Set i = code> au Haut du fichier de commandes pour effacer toutes les données anciennes avant que le script s'exécute (cela peut masquer des problèmes variables non initialisés tels que celui-ci).
Aws ... sa fonctionne maintenant .. ressemble à je manque "Set i =" Merci BTA pour m'aider ... :)
Votre erreur comme on le voit provient de mauvais formatage. Ne mettez pas tout sur 1 ligne. Utilisez plutôt ceci:
if /I "%user%"=="insertusername" ( GOTO :ACCOUNT ) ELSE ( GOTO :CHECKPASSACCT )
Si vous préférez @pipitas anser sur @BTA, car il est plus simple et n'éteignez pas la question de la question du comportement sinon code>. Les deux réponses sont bonnes cependant. Juste une note latérale, mais j'ai remarqué un comportement étrange appelant
goto code> dans une boucle où elle branche vers une ligne directement au-dessus d'une instruction code> si code>. Dans ces cas, curieusement, placer un
echo nul> nul code> ou quelque chose de similaire entre la destination et le
si code> instruction fonctionne comme un charme.
Un peu de retard, mais la description est fausse. La syntaxe est correcte, elle est absolument valide pour utiliser si "1" == "1" (goto: label1) € (goto: label2) code>.
goto code> n'a pas besoin d'une nouvelle ligne
Vous n'avez pas besoin d'utiliser les parenthèses. Vous dites essentiellement au système "Si% l'utilisateur%% est inserve inserve (" et il demande "quel est le" ("censé faire?" P>
Mauvais, le premier bloc de parenthèses doit être utilisé ici pour créer un bloc de commande. Sans parenthèse, l'autre ne peut pas être analysé (il fera partie de la commande goto code>) et du
si code> a échoué pour
false code> Conditions
Le problème n'a rien à voir avec le code indiqué!
Le problème est à p> comme la variable i code> n'est pas défini, la ligne sera étendue à p>
IF ==0 ( GOTO :RESETROUTER ) ELSE (