转到批量不能正常工作?

时间:2014-03-08 10:23:52

标签: batch-file

我在批量游戏中设置了一些东西。当确定输入一个选项并点击“Enter”时,它会转到下一个以:(我不知道它叫什么)的东西而不是它应该去的地方。

当用户键入“Y”时,而不是“Youtube”。

:visitoption
echo Would you like to visit the RST Garry's mod gaming community website?
set /p option=Y or N:
if %option%==Y start chrome (Censored link)
if %option%==N cls goto :youtube
if %option%==y start chrome (Censored link)
if %option%==n cls goto :youtube

:version
cls
@echo off
echo.
echo[ 
@echo off
echo.
echo[ 
echo                               --Version--
echo                               Lightup Demo
@echo off
echo.
echo[ 
@echo off
echo.
echo[ 
@echo off
echo.
echo[ 
pause
goto :versionwhite

:youtube
echo Would you like to visit the Creator's Youtube channel?
echo Gameplay commentarys and such.
set /p option=Y or N:
if %option%==Y start chrome (Censored link)
if %option%==N goto :Beginning
if %option%==y start chrome (Censored link)
if %option%==n goto :Beginning

3 个答案:

答案 0 :(得分:0)

基本上你在CLS之后错过了一个命令分隔符,但是我做了一些其他的更改,例如/i不区分大小写的比较,并使检查例程对空格更加健壮或没有输入。

:visitoption
echo Would you like to visit the RST Garry's mod gaming community website?
set /p option=Y or N:
if /i "%option%"=="Y" start "" chrome "(Censored link)"
if /i "%option%"=="N" cls & goto :youtube
goto :visitoption

答案 1 :(得分:0)

“事物”被称为label

由于您无法控制用户输入的内容,因此您应该使用

if "%option%"=="Y" start chrome (Censored link)

即,引用比较的两面(这不是防弹,但在用户不是故意试图打破你的系统的情况下充分服务。)

/i开关添加到if会使比较不区分大小写。

if defined option set "option=%option:~0,1%"

会将option设置为第一个字符。

请注意,如果用户只回复 Enter ,则变量的值保持不变。你可以利用这个特点

set "option=defaultvalue"
set /p option=Y or N:
如果用户只回复 Enter

会将选项设置为defaultvalue

start将独立启动流程。批次只是继续下一个声明。您可能正在使用start "window title for this instance" ... - 这是start的一个怪癖,第一个"quoted parameter"被用作窗口标题,您可能希望将其用作参数。

要在一行中连接一系列命令,您需要使用&符号&

分隔各个命令

关闭echo一次后,您不需要再次执行此操作(除非您执行echo on,您可以在调试期间执行此操作以显示程序流程。)领先 @ 表示don't echo this command - 如果没有它,则会复制初始ECHO OFF

您可以使用call :label执行从此批处理文件中的:label 开始的子程序。如果使用call label,则执行的“子例程”是可执行文件label。这是一个非常重要的区别。

出于这个原因,我避免使用goto :label - 尽管它有效 - 因为冒号不是必需的,并且gotocall命令之间是一致的。

这种省略冒号方法的一个例外是冒号实际确实有效 - goto 非常具体表示'转到此批处理文件的物理结尾' - :eof理解标签cmd具有该含义,不应在批处理中定义。

答案 2 :(得分:-1)

您已将其设置为当用户按下n时将其设置为youtube,而不是当用户输入y时,就像您说的那样尝试问题:

if %option%==N cls goto :youtube

请在发布问题之前尝试查看鳕鱼的使用情况。

SO拥有世界上最简单的CodeSlabing系统之一。血液难以按空间4次或突出显示并按下"Code Sample"按钮?

莫纳。