2017-10-10 55 views
0

所以,我在批處理腳本:)初學者批與IF ELSE和GOTO

這裏是我的代碼:

@echo. 
@echo off 

Set USER_ADM=LocAdmin 
Set pwd=%cd% 
Set choix=%1 

@echo. 

:ch 
cls 
@echo. 
@echo Choisis ce que tu veux ouvrir 
@echo. 
@echo 1. CMD 
@echo 2. Regedit 
@echo 3. MMC 
@echo. 
Set /P choix=Choix du programme a demarrer en %USER_ADM% (1-3) : 
@echo off 

if '%choix%' =='1' goto :cmd 
if '%choix%'=='2' goto :regedit 
if '%choix%'=='3' goto :mmc 

REM :error 
REM @echo %choix% N'est pas un chiffre entre 1 et 3 ! 
REM goto ch 

:cmd 
runas /user:%USER_ADM% C:\Windows\SysWOW64\cmd.exe 
goto ch 

:regedit 
runas /user:%USER_ADM% C:\Windows\regedit.exe 
goto ch 

:mmc 
runas /user:%USER_ADM% "mmc %pwd%\MMC\Mymmc.msc" 
goto ch 

@pause > nul 

我想,如果我進入1以外的任何東西都有一個消息,2或3. 我嘗試了幾件事情與「其他」和轉到錯誤,但沒有工作...

有人可以幫忙嗎? 在此先感謝!

+2

只是如果「%喜愛將%」後'插入代碼=='3 'goto:mmc',像'echo wrong input'和'goto:ch' – Stephan

+2

注意:你的'''語法和'if'一起工作,但是你最好使用'''來防止各種語法錯誤。對[choice](https://ss64.com/nt/choice.html)命令感興趣(這是它自己的錯誤處理,只允許定義的鍵) – Stephan

+0

您已經在交易的三條線的前面插入了'rem'語句與「其他」情況,**但**,因爲你hav e goto ch',下一個命令是'cls',它將刪除該消息。在goto ch之前插入'PAUSE'語句。 – Magoo

回答

0

您已經有處理這一代碼:

:ch 
cls 
@echo. 
@echo Choisis ce que tu veux ouvrir 
@echo Autres trucs francais je ne pouvais pas etre derange tapant (a) 

: 

if '%choix%' =='1' goto :cmd 
if '%choix%'=='2' goto :regedit 
if '%choix%'=='3' goto :mmc 

REM :error 
REM @echo %choix% N'est pas un chiffre entre 1 et 3 ! 
REM goto ch 

:cmd 

但有兩個問題。

  1. 的代碼已被註釋掉,這意味着比1..3以外的值是剛剛經歷下降到,做一個選項的代碼。

  2. 即使您取消註釋該代碼,它也會打印錯誤消息並立即返回至:ch標籤,清除屏幕。

第一個修復方法很簡單,只需從這三行中刪除rem關鍵字即可。

對於第二個問題,您可以使用兩種方法之一(至少)。

第一種選擇是在goto :ch之前立即插入pause命令。這會在屏幕上留下錯誤信息,直到您輸入內容。

第二個選項是而不是清除屏幕,而是隻是重新打印菜單。這可以通過在:ch標籤之前將cls移動到來完成。


(一)道歉對我的殘暴法國,特別是(但不一定限於)缺乏口音:-)