2016-04-24 160 views
2

我做了这个只是作为一个实验出于兴趣,在一些快速阅读在线教程和SO问题。批处理文件的IF语句不起作用?

这是我创建的批处理文件。

@ECHO OFF 

:input 
SET /P typeofc="To Connect input Y and to Disconnect input N (Y/N): " 
IF /I "%typeofc%"=="Y" goto yes 
IF /I "%typeofc%"=="N" goto no 

:yes 
rasdial whatevernetwork 

:no 
rasdial whatevernetwork /DISCONNECT 

然而,当我执行此,它运行在双方和yesno命令,无论给出的条件。试过也在做IF <condition> <command> ELSE <command>,但后来它只是在输入后退出,即使我在脚本的末尾添加了PAUSE

我在这做错了什么?

PS:我在Windows 7上执行这个32位

+2

没有什么可以阻止后'RASDIAL whatevernetwork'执行,因此下一行会被执行(并且被忽略,因为它是一个标签),那么下一行'rasdial whatevernetwork/DISCONNECT'将被执行。要停止执行,您可以使用'goto:eof'或'exit'。你的'if ... goto'语句本身在我的电脑上执行的很好。 (用'Y'做,只用'N'做第二个' – Stephan

+1

如果你的输入不是'Y'或'N',那么'ras'命令都会运行。 – Stephan

+0

是的,你是绝对正确的。问题是我在执行标签后没有写任何东西,添加它们就解决了问题,再加上像你说的,除了'Y'和'N'之外的任何输入只是执行下面的所有内容,所以我添加了'IF'语句检查'N'到一个不同的标签,跳进去,如果'Y'的语句返回false,然后再次调用':input',如果语句返回false。另外我发现为什么我的ELSE不起作用原来,你必须把真正的部分命令放在括号内。感谢帮助队友。 – RocketRuwan

回答

3

尝试类似的东西:

@echo off 
:input 
cls 
ECHO. 
SET /P typeofc="To Connect input Y and to Disconnect input N (Y/N): " 
IF /I "%typeofc%"=="Y" goto yes 
IF /I "%typeofc%"=="N" goto no 
ECHO "%typeofc%" is not valid. Please try again. 
pause 
GOTO input 

:yes 
echo rasdial whatevernetwork 
rasdial whatevernetwork 
pause 
exit /b 

:no 
echo rasdial whatevernetwork /DISCONNECT 
rasdial whatevernetwork /DISCONNECT 
pause 
exit /b 
+2

是的。这解决了它。并帮助我更好地了解它是如何工作的。谢谢Hackoo。 – RocketRuwan