cmd错误:goto此时出乎意料

时间:2016-05-07 20:54:48

标签: batch-file cmd goto

我只是学习如何在cmd中编码,但出于某种原因,那些教程在我的计算机上工作。我试图运行以下程序,但它一直在让我失败。

::My first program

@echo off
:main menu
cls
echo what are you doing?
echo.
echo 1) Nothing :-P
echo 2) dancing
echo. 
set /p var="Choose answer:" 
if %answer% == 1 goto nothing
if %answer% ==2 goto dancing

:nothing
echo ok...chill

:dancing
echo nice

echo on

4 个答案:

答案 0 :(得分:1)

您没有%answer%进行比较,因为您将问题的答案输入var。将[{1}}更改为使用set /p

answer

或更改您的两个if语句以使用set /p answer="Choose answer:" if %answer% == 1 goto nothing if %answer% ==2 goto dancing

var

答案 1 :(得分:1)

正如其他人在此指出的那样,您的问题是您设置了一个名为var的变量,然后尝试读取一个名为answer的变量。根修复是选择一个名称并坚持下去。但是,我想提供另外两个指针。

首先,在调试批处理文件时,请从文件顶部删除行@echo off。通过echo,您可以确切地看到在出现错误时正在执行的行,这将使您更快地找到解决方案。

其次,批处理文件终止的原因是语法错误。如果未设置answer变量,则会将if语句评估为

if == 1 goto nothing

这不是有效的批处理语法,这是导致错误的原因" goto此时是意外的" ,导致批处理文件终止。 如果用户输入空字符串,您的代码仍会出现此错误,即使在修复了错误的变量名称问题之后也是如此。要在IF语句中正确处理空变量,请在==的每一侧放置括号或引号,如下所示:

if [%answer%]==[1] goto nothing

这样,即使变量是空字符串,IF也会计算为if []==[1] goto nothing,这仍然是一个有效的语句,因此不会使您的脚本崩溃。

答案 2 :(得分:0)

::My first program

@echo off
:mainmenu
cls
echo what are you doing?
echo.
echo 1) Nothing :-P
echo 2) dancing
echo. 
set /p answer="Choose answer: " 
if %answer%==1 goto nothing
if %answer%==2 goto dancing

:nothing
echo ok...chill
pause
goto mainmenu

:dancing
echo nice
pause
goto mainmenu

这应该有用。

答案 3 :(得分:-2)

试试这个: 这里我为输入和比较设置了var。

  : : My first program
  @echo off
  :main menu
  cls
  echo .
  echo .
  echo what are you doing?
  echo 1) Nothing :-P
  echo 2) dancing
  echo .
  echo .
  echo choose answer:
  set /p var=
  IF %var%== 1 goto nothing
  IF %var%== 2 goto dancing

  :nothing
  echo ok...chill

  :dancing
  echo nice

  echo on