2013-10-01 18 views
5

Generalmente non creo file batch mentre digito semplicemente quello che mi serve nella casella di esecuzione o il prompt dei comandi, ma sto provando a crearne uno solo per permettermi di accedere alle utilità di base in Windows e controllare sulle cose (non ne ho davvero bisogno ma penso che mio padre lo troverebbe utile). Sono familiare (ma nuovo) con Python, quindi se l'uso di Python per queste cose è un'opzione migliore, posso comunque farlo, ma pensavo che batch fosse il modo migliore di fare qualcosa di così semplice. Il problema è con il mio menu. Penso che a causa del mio menu, stia ciclando attraverso tutti i comandi prima di eseguire il comando selezionato. Qualsiasi aiuto con questo sarà pienamente apprezzato, lo script batch si trova in una casella di codice qui sotto.Menu in 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 

risposta

1

cambiare la parte ErrorLevel a

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 

Si noti che il comando se i confronti sono spazi sensibili, pertanto, "0 "==" 0" non essere uguali.

1

Il errorlevel è un po 'strano. Quando si confronta in questo modo, in realtà controlla se il numero è inferiore o uguale. Quindi, per farlo funzionare nel modo attuale, è necessario ordinare i test al contrario.

L'altro modo per farlo è usare la variabile d'ambiente:

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

Di solito è una buona idea mettere goto :menu dopo tutti i test, nel caso in cui nessuno dei test passano. Ad esempio, se l'utente preme Ctrl-C, il valore di errore viene visualizzato come zero. Nel tuo codice (dopo aver corretto i test), questo passerà alla sezione :CHKDSK.

1

è possibile utilizzare un approccio molto più semplice se non prova il valore ERRORLEVEL a tutti, ma solo usarlo per assemblare un comando goto con più destinazioni. Affinché questo metodo funzioni, è necessario modificare le etichette in modo che includano i valori 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

funziona bene, ma aggiungere una ': LABEL-0 per evitare un' Il sistema non riesce a trovare l'etichetta batch specificato - LABEL-0 se l'utente preme CTRL + '' BREAK' o CTRL + C' due volte . Tuttavia, +1! – JosefZ