5

我通常不创建批处理文件,因为我只是在运行框或命令提示符中输入我需要的内容,但我试图制作一个只是为了让我访问 Windows 中的基本实用程序并检查事情(我真的不不需要它,但我认为我父亲会觉得它很有帮助)。我对 python 很熟悉(但很新),所以如果将 python 用于这些事情是一个更好的选择,我可以这样做,但是我认为批处理是做像这样简单的事情的最佳方式。问题出在我的菜单上。我认为由于我的 menu ,它在执行所选命令之前循环遍历所有命令。对此的任何帮助将不胜感激,批处理脚本位于下面的代码框中。

echo off
:menu
echo This is a simple cleanup and repair utility. Please select an option:
echo 1 - Check the hard disk c:\ for errors and inconsistancies. 
echo 2 - Renew the IP address 
echo 3 - View IP Address information
echo 4 - Check internet connection  by pinging http://www.google.co.uk/
echo 5 - Start disk cleanup utility
echo 6 - ping 192.168.0.1
echo 7 - ping 192.168.1.1
echo 8 - Open notepad
choice /n /c:12345678 /M "Choose an option (1-8) "
IF ERRORLEVEL == 1 GOTO CHKDSK
IF ERRORLEVEL == 2 GOTO RENEW
IF ERRORLEVEL == 3 GOTO DISPLAYIP
IF ERRORLEVEL == 4 GOTO PINGGOOGLE
IF ERRORLEVEL == 5 GOTO CLEANMGR
IF ERRORLEVEL == 6 GOTO PING0
IF ERRORLEVEL == 7 GOTO PING1
IF ERRORLEVEL == 8 GOTO STARTNOTE
:CHKDSK
CHKDSK C:
PAUSE
goto menu
:RENEW
IPCONFIG /RENEW
PAUSE
goto menu
:DISPLAYIP
IPCONFIG /ALL
PAUSE
goto menu
:PINGGOOGLE
PING HTTP://WWW.GOOGLE.CO.UK/
PAUSE
goto menu
:CLEANMGR
CLEANMGR
PAUSE
goto menu
:PING0
PING 192.168.0.1
PAUSE
goto menu
:PING1
PING 192.168.1.1
PAUSE
goto menu
:STARTNOTE
START NOTEPAD
PAUSE
goto menu
4

3 回答 3

2

如果您根本不测试errorlevel 值,您可以使用更简单的方法,而只需使用它来组装goto具有多个目标的命令。为了使此方法起作用,必须更改标签以使其包含错误级别值。

echo off
:menu
echo This is a simple cleanup and repair utility. Please select an option:
echo 1 - Check the hard disk c:\ for errors and inconsistancies. 
echo 2 - Renew the IP address 
echo 3 - View IP Address information
echo 4 - Check internet connection  by pinging http://www.google.co.uk/
echo 5 - Start disk cleanup utility
echo 6 - ping 192.168.0.1
echo 7 - ping 192.168.1.1
echo 8 - Open notepad
choice /n /c:12345678 /M "Choose an option (1-8) "
GOTO LABEL-%ERRORLEVEL%

:LABEL-1 CHKDSK
CHKDSK C:
PAUSE
goto menu
:LABEL-2 RENEW
IPCONFIG /RENEW
PAUSE
goto menu
:LABEL-3 DISPLAYIP
IPCONFIG /ALL
PAUSE
goto menu
:LABEL-4 PINGGOOGLE
PING HTTP://WWW.GOOGLE.CO.UK/
PAUSE
goto menu
:LABEL-5 CLEANMGR
CLEANMGR
PAUSE
goto menu
:LABEL-6 PING0
PING 192.168.0.1
PAUSE
goto menu
:LABEL-7 PING1
PING 192.168.1.1
PAUSE
goto menu
:LABEL-8 STARTNOTE
START NOTEPAD
PAUSE
goto menu
于 2013-10-02T03:28:41.323 回答
1

将 ErrorLevel 部分更改为

IF %ERRORLEVEL%==1 GOTO CHKDSK
IF %ERRORLEVEL%==2 GOTO RENEW
IF %ERRORLEVEL%==3 GOTO DISPLAYIP
IF %ERRORLEVEL%==4 GOTO PINGGOOGLE
IF %ERRORLEVEL%==5 GOTO CLEANMGR
IF %ERRORLEVEL%==6 GOTO PING0
IF %ERRORLEVEL%==7 GOTO PING1
IF %ERRORLEVEL%==8 GOTO STARTNOTE
goto menu

请注意,if 命令比较对空间敏感,因此“0”==“0”将不相等。

于 2013-10-01T21:09:46.633 回答
1

错误级别有点有趣。当你这样比较时,它实际上会检查数字是否小于或等于。因此,要使其以您当前的方式工作,您需要对测试进行反向排序。

另一种方法是使用环境变量:

if "%errorlevel%"=="4" goto :PINGGOOGLE

在所有测试之后进行通常是一个好主意goto :menu,以防万一测试都没有通过。例如,如果用户按下Ctrl-C,则错误级别显示为零。在您的代码中(在您修复测试之后),它将落入该:CHKDSK部分。

于 2013-10-01T21:09:55.610 回答