2017-10-10 70 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移动到来完成。


(一)道歉对我的残暴法国,特别是(但不一定限于)缺乏口音:-)