通过 .bat 文件(菜单)执行 .bat 文件(子菜单)时遇到问题

通过 .bat 文件(菜单)执行 .bat 文件(子菜单)时遇到问题

我创建了一个批处理文件菜单(名为“menu.bat”),其中列出了链接到各自批处理文件的三个子菜单,如下所示:

  1. 网络功能(networkfunctions.bat)
  2. 控制面板(controlpanel.bat)
  3. 配件(accessories.bat)

每个选择(即 1、2、3)的批处理文件名在括号中。

我将所有这些 .bat 文件保存在我的计算机上,目录结构如下:

目录:\批处理


以下是在 menu.bat 中找到的脚本:

回音关闭
标题 主菜单
::菜单.bat
::包含主批处理文件菜单
分类
:菜单
回声。
回声 ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º 我的名字在这里 ÄÄ 主菜单 º
echo ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
echo º 1. 网络功能 º
回声º 2. 控制面板º
回声º 3. 配件º
回声º 4. 退出º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
回声。
回声。
set /p input="选择数字:"
如果 %input% ==4 转到退出
如果 %input% ==3 转到配件
如果 %input% ==2 转到控制面板
如果 %input% ==1 转到网络功能

:网络功能
启动 c:\batch\networkfunctions.bat
暂停
转到菜单

:控制面板
启动 c:\batch\controlpanel.bat
暂停
转到菜单

:配件
启动 c:\batch\accessories.bat
暂停
转到菜单

:出口
出口

以下是network.bat中的脚本:

回音关闭
标题 网络功能
::网络功能.bat
::包含用于
::命令提示符
分类
:菜单
回声。                                                  
回声 ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º 我的名字在这里 Ä 网络功能 º
echo ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
回声º 1. IPCONFIGº
回显 º 2. IPCONFIG /ALL º
回声º 3. NETSTATº
回声º 4. NSLOOKUPº
回声º 5. Telnetº
回声 ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĹ
echo º 6. 返回主菜单 º
回声º 7. 退出º
回声 ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
回声。
回声。
set /p input="选择数字:"
如果 %input% ==7 转到退出
if %input% ==6 goto 返回主菜单
如果 %input% ==5 转到 Telnet
如果 %input% ==4 转到 NSLOOKUP
如果 %input% ==3 转到 NETSTAT
如果 %input% ==2 转到 IPCONFIG /ALL
如果 %input% ==1 转到 IPCONFIG

:IP配置
启动 c:\windows\system32\ipconfig.exe
暂停
转到菜单

:IP配置/全部
启动 c:\windows\system32\ipconfig.exe \all
暂停
转到菜单

:网络状态
启动 c:\windows\system32\netstat.exe
暂停
转到菜单

:NSLOOKUP
启动 c:\windows\system32\nslookup.exe
暂停
转到菜单

:远程登录
启动 c:\windows\system32\telnet.exe
暂停
转到菜单

:返回主菜单
启动 c:\batch\menu.bat
暂停
转到菜单

:出口
出口

这是controlpanel.bat中的脚本:

回音关闭
标题控制面板
::控制面板.bat
::包含相关控制面板小程序的菜单
分类
:菜单
回声。                                                  
回声 ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º 我的名字在这里 Ä 控制面板 º
echo ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
echo º 1. 配置管理器 º
echo º 2. Internet 选项 º
echo º 3. 网络连接 º
echo º 4. 系统属性 º
echo º 5. Windows 防火墙 º
回声 ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĹ
echo º 6. 返回主菜单 º
回声º 7. 退出º
回声 ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
回声。
回声。
set /p input="选择数字:"
如果 %input% ==7 转到退出
if %input% ==6 goto 返回主菜单
如果 %input% ==5 转到 Windows 防火墙
如果 %input% ==4 转到系统属性
如果 %input% ==3 转到网络连接
如果 %input% ==2 转到 Internet 选项
如果 %input% ==1 转到配置管理器

:配置管理器
启动rundll32.exe shell32.dll,Control_RunDLL C:\WINDOWS\system32\CCM\SMSCFGRC.cpl
暂停
转到菜单

:互联网选项
启动rundll32.exe shell32.dll,Control_RunDLL c:\windows\system32\inetcpl.cpl
暂停
转到菜单

:网络连接
启动rundll32.exe shell32.dll,Control_RunDLL c:\windows\system32\ncpa.cpl
暂停
转到菜单

:系统属性
启动rundll32.exe shell32.dll,Control_RunDLL c:\windows\system32\sysdm.cpl
暂停
转到菜单

:Windows 防火墙
启动rundll32.exe shell32.dll,Control_RunDLL c:\windows\system32\firewall.cpl
暂停
转到菜单

:返回主菜单
启动 c:\batch\menu.bat
暂停
转到菜单

:出口
出口

以下是 accessories.bat 中的脚本:

回音关闭
标题 配件
::附件.bat
::包含相关实用程序和应用程序的菜单
分类
:菜单
回声。                                                  
回声 ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º 我的名字在这里 Ä 配件 º
echo ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
echo º 1. DOS 编辑 º
echo º 2. 记事本 º
echo º 3. 系统信息 º
echo º 4. 系统还原 º
回声 ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĹ
echo º 5. 返回主菜单 º
回声º 6. 退出º
回声 ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
回声。
回声。
set /p input="选择数字:"
如果 %input% ==6 转到退出
如果 %input% ==5 转到返回主菜单
如果 %input% ==4 转到系统还原
如果 %input% ==3 转到系统信息
如果 %input% ==2 转到记事本
如果 %input% ==1 转到 DOS 编辑

:DOS 编辑
启动 c:\windows\system32\edit.com
暂停
转到菜单

:记事本
启动 c:\windows\system32\notepad.exe
暂停
转到菜单

:系统信息
启动 c:\program files\common files\microsoft shared\msinfo.exe
暂停
转到菜单

:系统还原
启动 c:\windows\System32\restore\rstrui.exe
暂停
转到菜单

:返回主菜单
启动 c:\batch\menu.bat
暂停
转到菜单

:出口
出口

问题


我可以成功执行 menu.bat。我可以看到三个选项。

  1. 网络功能
  2. 控制面板
  3. 配件

如果我选择“1”,我将进入“网络功能”子菜单。完美。

如果我选择“3”,我就会进入“配件”子菜单。完美。

如果我选择“4”,我将退出 Windows 命令行。完美。

问题是如果我选择“2”;它会出现以下错误:

系统找不到指定的批次标签 - 控制

驱动器标签随后从 c:\ 更改为 c:\batch。

奇怪的是,如果我在运行框中输入文件 c:\batch\controlpanel.bat,我可以执行它。它运行完美。

但是,如果我尝试通过 menu.bat 文件执行它,它就不会执行。

这是怎么回事?任何帮助都非常感谢。我快要完成这个课堂项目了。

先感谢您。

答案1

您将“Control Panel”拼写错误为“Contol_Panel”。

答案2

@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%

相关内容