2017-01-26 2 views
-4

Проект представляет собой небольшой командный терминал с экраном входа. Однако после того, как я пройду логин, он больше не открывается. У кого-нибудь есть предложения/исправления? (Кроме того, я понимаю, что часть кода не были на 100% меня)Почему этот пакетный скрипт не запускается после входа?

@echo off 
:LOGIN 
set/p uname= < HoodedBlack 
set/p pass=< Password 
title Login 
cls 
echo ------------------------------------------------- 
echo   HoodedBlack's Mainframe V0.1 
echo      Login 
echo ------------------------------------------------- 
echo. 
echo. 
set/p "unamel=    Username : 
set/p "passwordl=    Password : 
echo. 

IF "%passwordl%"=="Password" goto LOADING 

IF NOT "%passwordl%"=="Password" 
goto ERROR 


:ERROR 
echo ------------------------------------------------- 
echo      Error 
echo ------------------------------------------------- 
echo Invalid Username or password 
echo An Admin has been notified of this attempt. 
pause 




:LOADING 
title Loading... 
set load=%load%!!!!!!! 
cls 
echo ------------------------------------------------- 
echo      Login 
echo ------------------------------------------------- 
echo. 
echo. 
echo     Username : %unamel% 
echo     Password : %passwordl% 
echo. 
echo. 
echo   Logging in... 
echo   =================================== 
echo   %load% 
echo   =================================== 
echo.        Please Wait... 
echo. 
ping localhost -n 2 >nul 
set/a loadnum=%loadnum% +1 
if %loadnum%==5 goto DONE 
goto LOADING 

:DONE 
title Done 
cls 
echo ------------------------------------------------- 
echo      Done 
echo ------------------------------------------------- 
echo. 
echo    # 
echo    # 
echo  #  #   Login Successfully 
echo  # # 
echo  # 
echo. 
echo. 
echo ------------------------------------------------- 
pause 
goto WELCOME 

:WELCOME 
title Welcome 
cls 
echo ---------------------------------------------------- 
echo Welcome, HoodedBlack! Your rank is: Mainframe Owner 
echo    Mainframe v0.1 HoodedBlack 
echo ---------------------------------------------------- 
echo. 
echo Hello!   
echo Say "cmds" for a list of commands 
echo or say "exit" to exit the mainframe    
echo. 
echo. 
echo. 
echo. 
set INPUT= 
set /P INPUT=Type input: %=% 
If %INPUT%=="cmds" goto cmds 
If NOT %INPUT%=="cmds" 
then 
If %INPUT%=="exit" goto exit 
If NOT %INPUT%=="exit" 
then 
If %INPUT%=="DDoS" goto DDoS 
If %INPUT%=="DDoS" 
then 
If %INPUT%=="DoS" goto DoS 
If %INPUT%=="DoS" 
then 
If %INPUT%=="Password" goto pword 
If NOT %INPUT%=="Password" 
then pause 




:cmds 
title cmds 
cls 
echo ------------------------------------------------- 
echo      Commands list 
echo ------------------------------------------------- 
echo. 
echo    DDoS: Redirects you to a ddos service. 
echo    DoS: Sends a ping dos attack 
echo     (More commands coming soon!) 
echo ------------------------------------------------- 
pause 
goto WELCOME 

:exit 
title exit 
exit 


:DDoS 
start www.alphastress.com 

:DoS 
title cmds 
cls 
echo ------------------------------------------------- 
echo   Ping attack (Denial Of Service) 
echo ------------------------------------------------- 
echo Select an IP to send the attack to 
echo 
echo ------------------------------------------------- 


:pword 
title Password Generator 
cls 
echo I will make you a new password. 
echo Please write the password down somewhere in case you forget it. 
echo ----------------------------------------­----------------------- 
echo 1) 1 Random Password 
echo 2) 5 Random Passwords 
echo 3) 10 Random Passwords 
echo Input your choice 
set input= 
set /p input= Choice: 
if %input%==1 goto A if NOT goto Start2 
if %input%==2 goto B if NOT goto Start2 
if %input%==3 goto C if NOT goto Start2 
:A 
cls 
echo Your password is %random% 
echo Now choose what you want to do. 
echo 1) Go back to the beginning 
echo 2) Exit 
set input= 
set /p input= Choice: 
if %input%==1 goto Start2 if NOT goto Start 2 
if %input%==2 goto Exit if NOT goto Start 2 
:Exit 
exit 
:B 
cls 
echo Your 5 passwords are %random%, %random%, %random%, %random%, %random%. 
echo Now choose what you want to do. 
echo 1) Go back to the beginning 
echo 2) Exit 
set input= 
set /p input= Choice: 
if %input%==1 goto Start2 if NOT goto Start 2 
if %input%==2 goto Exit if NOT goto Start 2 
:C 
cls 
echo Your 10 Passwords are %random%, %random%, %random%, %random%, %random%, %random%, %random%, %random%, %random%, %random% 
echo Now choose what you want to do. 
echo 1) Go back to the beginning 
echo 2) Exit 
set input= 
set /p input= Choice: 
if %input%==1 goto Start2 if NOT goto Start 2 
if %input%==2 goto Exit if NOT goto Start 2 
+0

Вам не хватает закрывающих кавычек в строках 'uname1' и' password1' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Если у вас будут многострочные выражения 'if', такие как те, в которых вы проверяете, что'% password1% 'равно« Пароль », вам нужны скобки. – SomethingDark

+0

@HoodedBlack Хотя может быть полезно изучить и написать сценарии в Windows Batch, вы также можете попробовать PowerShell. Гораздо проще в использовании, имеет отличную документацию и очень мощная. Я бы посоветовал вам попробовать PowerShell, и я уверен, что вам это понравится. BTW, PowerShell поставляется с Windows, и вам не нужно ничего устанавливать, чтобы начать использовать его. См. Https://powershell.org/ и https://msdn.microsoft.com/en-us/powershell/ – bahrep

ответ

0

Благодаря bahrep ...

HoodedBlack -> Некоторые реструктуризации и некоторые новые команды, чтобы проверить:

@echo off 

setlocal 
:MAIN_LOOP 
call :LOGIN 
if "%AUTHENTICATED%" == "TRUE" (
    call :LOADING 
    call :WELCOME 
    ) 
goto MAIN_LOOP 
endlocal 

goto END 
REM **************************************************************************** 


:LOGIN 
set UNAME=HoodedBlack 
set PASS=Password 
set AUTHENTICATED=TRUE 
set UNAMEL= 
set PASSWORDL= 
title Login 
cls 
color 0a 
echo ------------------------------------------------- 
echo   HoodedBlack's Mainframe V0.1 
echo      Login 
echo ------------------------------------------------- 
echo. 
echo. 
set/p "UNAMEL=    Username : 
set/p "PASSWORDL=    Password : 
echo. 

REM *** /i makes comparison non-case sensitive. 
if /i "%UNAMEL%" NEQ "%UNAME%" set AUTHENTICATED=FALSE 
if "%PASSWORDL%" NEQ "%PASS%" set AUTHENTICATED=FALSE 
if "%AUTHENTICATED%" == "TRUE" (
    call :LOGIN_OK 
    goto END 
    ) 

color 4e 
title Access Denied 
echo ------------------------------------------------- 
echo      Error 
echo ------------------------------------------------- 
echo Invalid Username or password 
echo An Admin has been notified of this attempt. 
echo. 
echo Press any key. 
pause>nul 
goto END 
REM **************************************************************************** 


:LOADING 
title Loading... 
set /a LOADNUM=0 
set LOAD= 
:LOAD_LOOP 
set LOAD=%LOAD%!!!!!!! 
cls 
echo ------------------------------------------------- 
echo      Login 
echo ------------------------------------------------- 
echo. 
echo. 
echo     Username : %unamel% 
rem echo     Password : %passwordl% 
echo. 
echo. 
echo   Logging in... 
echo   =================================== 
echo   %LOAD% 
echo   =================================== 
echo.        Please Wait... 
echo. 
ping localhost -n 2 >nul 
set /a LOADNUM+=1 
if %LOADNUM% LSS 5 goto LOAD_LOOP 
goto END 
REM **************************************************************************** 


:LOGIN_OK 
title Done 
cls 
echo ------------------------------------------------- 
echo      Done 
echo ------------------------------------------------- 
echo. 
echo    # 
echo    # 
echo  #  #   Login Successfully 
echo  # # 
echo  # 
echo. 
echo. 
echo ------------------------------------------------- 
pause 
goto END 
REM **************************************************************************** 


:WELCOME 
title Welcome 
cls 
echo ---------------------------------------------------- 
echo Welcome, HoodedBlack! Your rank is: Mainframe Owner 
echo    Mainframe v0.1 HoodedBlack 
echo ---------------------------------------------------- 
echo. 
echo Hello!   
echo Say "cmds" for a list of commands 
echo or say "exit" to exit the mainframe    
echo. 
echo. 
:INPUT_LOOP 
set INPUT= 
set /P INPUT=Type input: 
if /i "%INPUT%" == "CMDS"  call :CMDS & goto INPUT_LOOP 
if /i "%INPUT%" == "DDOS"  call :DDoS & goto INPUT_LOOP 
if /i "%INPUT%" == "DOS"  call :DoS & goto INPUT_LOOP 
if /i "%INPUT%" == "PASSWORD" call :pword & goto INPUT_LOOP 
if /i "%INPUT%" == "EXIT"  goto END 
echo Unrecognised command. 
goto INPUT_LOOP 
REM **************************************************************************** 


:CMDS 
title cmds 
echo. 
echo ------------------------------------------------- 
echo      Commands list 
echo ------------------------------------------------- 
echo. 
echo    DDoS: Redirects you to a ddos service. 
echo    DoS: Sends a ping dos attack 
echo     (More commands coming soon!) 
echo ------------------------------------------------- 
echo. 
goto END 
REM **************************************************************************** 


:DDoS 
start www.alphastress.com 
goto END 
REM **************************************************************************** 


:DoS 
title cmds 
cls 
echo ------------------------------------------------- 
echo   Ping attack (Denial Of Service) 
echo ------------------------------------------------- 
echo Select an IP to send the attack to 
echo. 
echo ------------------------------------------------- 
pause 
goto END 
REM **************************************************************************** 


:PWORD 
title Password Generator 
cls 
echo I will make you a new password. 
echo Please write the password down somewhere in case you forget it. 
echo ----------------------------------------­----------------------- 
echo 1) 1 Random Password 
echo 2) 5 Random Passwords 
echo 3) 10 Random Passwords 
echo Input your choice 
set INPUT= 
set /p INPUT= Choice: 

if "%INPUT%" == "1" (
    echo Your password is %RANDOM%. 
    goto PASSWORD_DONE 
    ) 
if "%INPUT%" == "2" ( 
    echo Your 5 passwords are %RANDOM%, %RANDOM%, %RANDOM%, %RANDOM%, %RANDOM%. 
    goto PASSWORD_DONE 
    ) 
if "%INPUT%" == "3" ( 
    echo Your 10 Passwords are %RANDOM%, %RANDOM%, %RANDOM%, %RANDOM%, %RANDOM%, %RANDOM%, %RANDOM%, %RANDOM%, %RANDOM%, %RANDOM%. 
    goto PASSWORD_DONE 
    ) 
echo Invalid option - press any key. 
pause >nul 
goto PWORD 

:PASSWORD_DONE 
echo. 
goto END 
REM **************************************************************************** 


:END 
REM **************************************************************************** 

Я согласен с приведенными выше ссылками PowerShell. Скрипты оболочки Windows немного немного, в основном из-за того, что более продвинутые вещи были «застряли», а не «разработаны». Одним из примеров этого являются подпрограммы - да, вы можете их сделать (см. : SUBROUTINE_NAME выше), но они не поддерживают оператор return. Вместо этого вы должны заставить скрипт дойти до конца файла, после чего интерпретатор команд понимает, что он имеет номер строки возврата в своем «стеке». Вот почему вы увидите goto END выше (ярлык : END может быть любым именем).

Удачи вам!

Смежные вопросы