Я создал меню пакетного файла (названное «menu.bat»), в котором перечислены три подменю, связанные с соответствующими пакетными файлами, следующим образом:

  1. Сетевые функции (networkfunctions.bat)
  2. Панель управления (controlpanel.bat)
  3. Аксессуары (accessories.bat)

Пакетное имя файла каждого выбора (то есть, 1, 2, 3) в скобках.

У меня все эти .bat файлы сохранены на моем компьютере в следующей структуре каталогов:

C:\ партия


Вот скрипт, найденный в menu.bat:

echo off
title Main Menu
::menu.bat
::Contains main batch file menu
cls
:menu
echo.
echo                           ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo                           º MY NAME HERE ÄÄ Main Menu º
echo                           ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
echo                           º 1. Network Functions       º
echo                           º 2. Control Panel           º
echo                           º 3. Accessories             º
echo                           º 4. Exit                    º
echo                           ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo.
set /p input="Select number: "
if %input% ==4 goto Exit
if %input% ==3 goto Accessories
if %input% ==2 goto Control Panel
if %input% ==1 goto Network Functions

:Network Functions
start c:\batch\networkfunctions.bat
pause
goto menu

:Contol Panel
start c:\batch\controlpanel.bat
pause
goto menu

:Accessories
start c:\batch\accessories.bat
pause
goto menu

:Exit
exit

Вот скрипт в network.bat:

echo off
title Network Functions
::networkfunctions.bat
::contains network functions and utilities for use on the
::command prompt
cls
:menu
echo.                                                  
echo                    ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo                    º  MY NAME HERE Ä Network Functions  º
echo                    ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
echo                    º  1. IPCONFIG                        º
echo                    º  2. IPCONFIG /ALL                   º
echo                    º  3. NETSTAT                         º
echo                    º  4. NSLOOKUP                        º
echo                    º  5. Telnet                          º
echo                    ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĹ
echo                    º  6. Return to Main Menu             º
echo                    º  7. Exit                            º
echo                    ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo.
set /p input="Select number: "
if %input% ==7 goto Exit
if %input% ==6 goto Return to Main Menu
if %input% ==5 goto Telnet
if %input% ==4 goto NSLOOKUP
if %input% ==3 goto NETSTAT
if %input% ==2 goto IPCONFIG /ALL
if %input% ==1 goto IPCONFIG

:IPCONFIG
start c:\windows\system32\ipconfig.exe
pause
goto menu

:IPCONFIG /ALL
start c:\windows\system32\ipconfig.exe \all
pause
goto menu

:NETSTAT
start c:\windows\system32\netstat.exe
pause
goto menu

:NSLOOKUP
start c:\windows\system32\nslookup.exe
pause
goto menu

:Telnet
start c:\windows\system32\telnet.exe
pause
goto menu

:Return to Main Menu
start c:\batch\menu.bat
pause
goto menu

:Exit
exit

Вот скрипт в controlpanel.bat:

echo off
title Control Panel
::controlpanel.bat
::contains a menu of pertinent control panel applets
cls
:menu
echo.                                                  
echo                    ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo                    º    MY NAME HERE Ä Control Panel    º
echo                    ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
echo                    º  1. Configuration Manager           º
echo                    º  2. Internet Options                º
echo                    º  3. Network Connections             º
echo                    º  4. System Properties               º
echo                    º  5. Windows Firewall                º
echo                    ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĹ
echo                    º  6. Return to Main Menu             º
echo                    º  7. Exit                            º
echo                    ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo.
set /p input="Select number: "
if %input% ==7 goto Exit
if %input% ==6 goto Return to Main Menu
if %input% ==5 goto Windows Firewall
if %input% ==4 goto System Properties
if %input% ==3 goto Network Connections
if %input% ==2 goto Internet Options
if %input% ==1 goto Configuration Manager

:Configuration Manager
start rundll32.exe shell32.dll,Control_RunDLL C:\WINDOWS\system32\CCM\SMSCFGRC.cpl
pause
goto menu

:Internet Options
start rundll32.exe shell32.dll,Control_RunDLL c:\windows\system32\inetcpl.cpl
pause
goto menu

:Network Connections
start rundll32.exe shell32.dll,Control_RunDLL c:\windows\system32\ncpa.cpl
pause
goto menu

:System Properties
start rundll32.exe shell32.dll,Control_RunDLL c:\windows\system32\sysdm.cpl
pause
goto menu

:Windows Firewall
start rundll32.exe shell32.dll,Control_RunDLL c:\windows\system32\firewall.cpl
pause
goto menu

:Return to Main Menu
start c:\batch\menu.bat
pause
goto menu

:Exit
exit

Вот скрипт в accessories.bat:

echo off
title Accessories
::accessories.bat
::contains a menu of pertinent utilities and applications
cls
:menu
echo.                                                  
echo                    ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo                    º     MY NAME HERE Ä Accessories     º
echo                    ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
echo                    º  1. DOS Edit                        º
echo                    º  2. Notepad                         º
echo                    º  3. System Information              º
echo                    º  4. System Restore                  º
echo                    ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĹ
echo                    º  5. Return to Main Menu             º
echo                    º  6. Exit                            º
echo                    ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo.
set /p input="Select number: "
if %input% ==6 goto Exit
if %input% ==5 goto Return to Main Menu
if %input% ==4 goto System Restore
if %input% ==3 goto System Information
if %input% ==2 goto Notepad
if %input% ==1 goto DOS Edit

:DOS Edit
start c:\windows\system32\edit.com
pause
goto menu

:Notepad
start c:\windows\system32\notepad.exe
pause
goto menu

:System Information
start c:\program files\common files\microsoft shared\msinfo.exe
pause
goto menu

:System Restore
start c:\windows\System32\restore\rstrui.exe
pause
goto menu

:Return to Main Menu
start c:\batch\menu.bat
pause
goto menu

:Exit
exit

ЭТА ПРОБЛЕМА


Я могу успешно выполнить menu.bat. Мне представлены три выбора.

  1. Сетевые функции
  2. Панель управления
  3. аксессуары

Если я выберу "1", я попаду в подменю "Сетевые функции". Отлично.

Если я выберу "3", я попаду в подменю "Аксессуары". Отлично.

Если я выберу «4», я выйду из командной строки Windows. Отлично.

Проблема в том, что если я выберу "2"; это обеспечивает следующую ошибку:

The system cannot find the batch label specified - control

Затем метка диска изменится с c:\ на c:\ batch.

Любопытно, что я МОГУ выполнить файл c:\batch\controlpanel.bat, если введу его в поле «Выполнить». Работает отлично.

Но если я попытаюсь выполнить его через файл menu.bat, он не будет выполнен.

Что тут происходит? Любая помощь приветствуется. Я так близок к завершению этого проекта класса.

Заранее спасибо.

2 ответа2

1

Вы неправильно написали панель управления как Contol_Panel.

1

@ Hello71 правильно. Посмотрите ниже, что непосредственно иллюстрирует, что нужно изменить. Это не имеет ничего общего с подчеркиванием.

   echo off
    title Main Menu
    ::menu.bat
    ::Contains main batch file menu
    cls
    :menu
    echo.
    echo                           ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
    echo                           º MY NAME HERE ÄÄ Main Menu º
    echo                           ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
    echo                           º 1. Network Functions       º
    echo                           º 2. Control Panel           º
    echo                           º 3. Accessories             º
    echo                           º 4. Exit                    º
    echo                           ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
    echo.
    echo.
    set /p input="Select number: "
    if %input% ==4 goto Exit
    if %input% ==3 goto Accessories
    if %input% ==2 goto Control Panel 
    if %input% ==1 goto Network Functions

    :Network Functions
    start c:\batch\networkfunctions.bat
    pause
    goto menu

    :Contol Panel <<- It's spelled "Control" not "Contol"

    start c:\batch\controlpanel.bat
    pause
    goto menu

    :Accessories
    start c:\batch\accessories.bat
    pause
    goto menu

    :Exit
    exit

Некоторые другие рекомендации:

  • При тестировании переменной на конкретное значение вы должны заключить оба параметра в кавычки, например:

    if '%input%'=='4' goto Exit

Поскольку процессор командных команд заменяет переменные их содержимым перед интерпретацией команды, это позволяет избежать синтаксических ошибок, если %input% оказался по каким-либо причинам нулевым или неопределенным. Просто хорошая привычка развиваться.

Вы также не учли тот факт, что пользователь может ввести что-то, кроме 1, 2, 3 или 4. Таким образом, результатом в вашем скрипте является то, что он "провалится" в раздел "Сетевые функции", что может привести к путанице. Вы должны echo сообщение об ошибке и goto обратно к входному , если %input% ничего ожидаемого не совпадают. Еще одна хорошая привычка.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .