سؤال

لدي مشكلة إذا كان آخر في السيناريو دفعي ...

في المفكرة:
شفرة:

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

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

في الأمر:
شفرة:

(كان غير متوقع في هذا الوقت.

رمز النص الكامل:

@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%
هل كانت مفيدة؟

المحلول

يمكنك تبسيط هذا إلى:

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

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

ال ELSE العبارات ليست ضرورية. منذ IF القفز القفز في مكان آخر ، وضع الثاني GOTO على السطر التالي أو في ELSE يجب أن تكون الكتلة مكافئة.

أيضًا ، تحتاج إلى القولون الرائد عند تعريف أ GOTO الهدف ولكن ليس عند الإشارة إلى الاسم الهدف داخل GOTO بيان نفسه.

نصائح أخرى

خطأك كما رأينا يأتي من التنسيق الخاطئ. لا تضع كل شيء على خط واحد. بدلاً من ذلك ، استخدم هذا:

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

السبب الأعمق والكامن هو: goto :somewhere يجب إنهاء الأمر بواسطة سطر جديد.

المشكلة لا علاقة لها بالرمز المبين!

المشكلة في

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

كما المتغير i غير محدد ، سيتم توسيع الخط إلى

IF ==0 ( GOTO :RESETROUTER ) ELSE (

هذا تعبير غير صالح.

للعثور على مثل هذا الجملة البسيطة ، يجب عليك تمكين التصحيح مع ECHO ON.

لا تحتاج إلى استخدام الأقواس. أنت تخبر النظام بشكل أساسي "إذا كان ٪ user ٪ هو إدراج اسم (" ويسأل "ما هو" (من المفترض أن تفعل؟ "

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top