2013-10-01 16 views
5

Tôi không thường tạo các tập tin batch vì tôi chỉ cần gõ những gì tôi cần vào hộp chạy hoặc nhắc lệnh nhưng tôi đang cố gắng tạo một cái để cho phép tôi truy cập các tiện ích cơ bản trong windows và kiểm tra về mọi thứ (tôi thực sự không cần nó nhưng tôi nghĩ bố tôi sẽ thấy nó hữu ích). Tôi quen thuộc (nhưng mới) với python vì vậy nếu sử dụng python cho những điều này là một lựa chọn tốt hơn tôi có thể làm điều đó, tuy nhiên tôi nghĩ hàng loạt là cách tốt nhất để làm một cái gì đó đơn giản như thế này. Vấn đề là với trình đơn của tôi. Tôi nghĩ vì trình đơn của tôi, nó đang đi qua tất cả các lệnh trước khi thực hiện lệnh được chọn. Bất kỳ trợ giúp nào với điều này sẽ được đánh giá đầy đủ, tập lệnh batch nằm trong hộp mã bên dưới.Menu trong File Batch

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 

Trả lời

1

Thay đổi phần 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 

Lưu ý rằng nếu so sánh lệnh là không gian nhạy cảm do đó, "0 "==" 0" sẽ không được bình đẳng.

1

Errorlevel hơi buồn cười. Khi bạn so sánh như vậy, nó thực sự kiểm tra nếu số nhỏ hơn hoặc bằng. Vì vậy, để làm cho nó hoạt động theo cách hiện tại của bạn, bạn cần phải đặt hàng các bài kiểm tra ngược lại.

Một cách khác để làm điều đó là sử dụng các biến môi trường:

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

Nó thường là một ý tưởng tốt để đặt goto :menu sau khi tất cả các bài kiểm tra, chỉ trong trường hợp không ai trong số các bài kiểm tra vượt qua. Ví dụ: nếu người dùng nhấn Ctrl-C, errorlevel xuất hiện ở dạng không. Trong mã của bạn (sau khi bạn sửa các thử nghiệm), mã sẽ rơi vào phần :CHKDSK.

1

Bạn có thể sử dụng một cách tiếp cận đơn giản hơn nhiều nếu bạn không kiểm tra giá trị errorlevel ở tất cả, nhưng chỉ sử dụng nó để lắp ráp một lệnh goto với nhiều điểm đến. Để phương thức này hoạt động, các nhãn phải được thay đổi để chúng bao gồm các giá trị errorlevel.

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

Hoạt động tốt nhưng nối thêm ': LABEL-0' để tránh' Hệ thống không thể tìm thấy nhãn lô được chỉ định - LABEL-0' nếu người dùng nhấn 'CTRL + BREAK' hoặc' CTRL + C' hai lần . Tuy nhiên, +1! – JosefZ

Các vấn đề liên quan