2013-10-01 16 views
5

Zwykle nie tworzę plików wsadowych, ponieważ właśnie wpisuję to, czego potrzebuję, w polu uruchamiania lub w wierszu polecenia, ale próbuję zrobić tylko po to, aby umożliwić mi dostęp do podstawowych narzędzi w oknach i sprawdzanie na rzeczy (naprawdę nie potrzebuję tego, ale myślę, że mój tata uzna to za pomocne). Jestem zaznajomiony (ale nowy) z pythonem, więc jeśli użycie pythona dla tych rzeczy jest lepszą opcją, mogę to zrobić, jednak myślałem, że partia to najlepszy sposób robienia czegoś tak prostego jak to. Problem dotyczy mojego menu. Myślę, że z powodu mojego menu, przechodzi przez wszystkie polecenia przed wykonaniem wybranego polecenia. Każda pomoc z tym będzie w pełni doceniona, skrypt wsadowy znajduje się w polu poniżej.Menu w pliku wsadowym

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 

Odpowiedz

1

Zmiana errorlevel część do

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 

Należy zauważyć, że jeśli przestrzeń porównania poleceń są zatem wrażliwe "0 "==" 0" nie będą równe.

1

Poziom błędu jest nieco zabawny. Porównując w ten sposób, faktycznie sprawdza, czy liczba jest mniejsza lub równa. Aby sprawić, aby działał on w aktualny sposób, musisz zamówić testy w odwrotnej kolejności.

Innym sposobem, aby to zrobić jest użyć zmiennej środowiska:

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

to zwykle dobry pomysł, aby umieścić goto :menu po wszystkich testach, tylko w przypadku żaden z przejść testy. Na przykład, jeśli użytkownik naciśnie klawisz Ctrl-C, poziom błędu wyniesie zero. W twoim kodzie (po naprawieniu testów) przejdzie do sekcji :CHKDSK.

1

może użyć znacznie prostsze podejście, jeśli nie testową wartość errorlevel w ogóle, lecz tylko używać go zebrać goto polecenie z wielu miejsc. Aby ta metoda działała, etykiety muszą zostać zmienione, aby zawierały wartości poziomów błędu.

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 
+0

Działa dobrze, ale dołączania ': LABEL-0' uniknąć' System nie może odnaleźć określonej partii etykiety - Label-0' jeśli użytkownik naciśnie klawisz CTRL + '' BREAK' lub CTRL + C' dwukrotnie . Jednak +1! – JosefZ

Powiązane problemy