首页 > 解决方案 > 批处理文件在 if 语句处不断崩溃

问题描述

我正在制作一个简单的文字游戏。一切正常,直到它到达 if 语句。我不知道我做错了什么。

@echo off

title Text Adventures

echo "What is your name?"

set /p name=

echo "That was a bad crash. Are you hurt, %name%?"

echo.

echo Y/N

set /p answer=

if %answer% equ y goto hurt

:hurt

echo.

echo "I see. That's a gnarly gash you've got there!"

标签: if-statementbatch-filecmdgoto

解决方案


在这里,我将其重写为使用函数的形式,并使用我提供给原始帖子的建议作为评论。

你知道我错误地假设你有使用标签的目的,但考虑到问题给出的方式,我认为你最好不要打扰它们。

这是一个无标签版本:

@(SETLOCAL
  echo off
  title Text Adventures
)

CALL :Main

( ENDLOCAL
 ECHO. The Script Ended!
 PAUSE
 EXIT /B
)

:Main

  set /p "name=What is Your Name?"
  ECHO.
  CHOICE /M "That was a bad crash. Are you hurt, %name%?"
  
  If %ERRORLEVEL% equ 1 (
    echo.
    echo "I see. That's a gnarly gash you've got there!"
  ) ELSE (
    echo.
    echo "Oh Good!"
  )
  PAUSE
GOTO :EOF

这是标签版本。(我删除了解释它是如何工作的以及为什么代码在那里的注释,所以它对你来说不会那么混乱。)

@(SETLOCAL
  echo off
  title Text Adventures
)

CALL :Main

( ENDLOCAL
 ECHO. The Script Ended!
 PAUSE
 EXIT /B
)

:Main

  set /p "name=What is Your Name?"
  ECHO.
  CHOICE /M "That was a bad crash. Are you hurt, %name%?"
  
  If %ERRORLEVEL% equ 1 (
    CALL :Hurt
  ) ELSE (
    CALL :NotHurt
  )
  PAUSE
GOTO :EOF

:Hurt
  echo.
  echo "I see. That's a gnarly gash you've got there!"
GOTO :EOF

:NotHurt
  echo.
  echo "Oh Good!"
GOTO :EOF

推荐阅读