Мой пакетный скрипт не работает. Кто-нибудь может сказать мне, почему? - PullRequest
1 голос
/ 23 января 2011

Мне нужна помощь с моим сценарием. Все вещи продолжают проваливаться и не делают goto. Вы можете помочь?

@ECHO OFF
goto joshua
:joshua
Echo Hello my name is Joshua.
echo What is yours?
set /p name=
cls
Echo Hello %name%.
cls
Echo How are you?
set /p feeling=
cls
echo Is this good?
echo Im sorry I am still learning human feelings.
set /p humanfeelings=Yes/No
if %humanfeelings%==Yes goto Good
if %humanfeelings%==No goto Bad
cls
:Good
Echo Well that is pleasent.
Echo Would you like to play a game %name%?
set /p answer=Yes/No
if %answer%==Yes goto startmenu
if %answer%== No goto quit
cls
:Bad
echo That is not good.
echo Would you like to play a game %name%?
set /p answera=Yes/No
if %answera%==Yes goto startmenu
if %answera%== No goto later
cls
:startmenu
start menu.bat
cls
:later
Echo That is fine %name%, maybe later
pause
exit

Ответы [ 4 ]

2 голосов
/ 23 января 2011

Ваш оригинальный код с номерами строк:

1 :  @ECHO OFF
2 :  goto joshua
3 :  :joshua
4 :  Echo Hello my name is Joshua.
5 :  echo What is yours?
6 :  set /p name=
7 :  cls
8 :  Echo Hello %name%.
9 :  cls
10:  Echo How are you?
11:  set /p feeling=
12:  cls
13:  echo Is this good?
14:  echo Im sorry I am still learning human feelings.
15:  set /p humanfeelings=Yes/No
16:  if %humanfeelings%==Yes goto Good
17:  if %humanfeelings%==No goto Bad
18:  cls
19:  :Good
20:  Echo Well that is pleasent.
21:  Echo Would you like to play a game %name%?
22:  set /p answer=Yes/No
23:  if %answer%==Yes goto startmenu
24:  if %answer%== No goto quit
25:  cls
26:  :Bad
27:  echo That is not good.
28:  echo Would you like to play a game %name%?
29:  set /p answera=Yes/No
30:  if %answera%==Yes goto startmenu
31:  if %answera%== No goto later
32:  cls
33:  :startmenu
34:  start menu.bat
35:  cls
36:  :later
37:  Echo That is fine %name%, maybe later
38:  pause
39:  exit
  • Строка 2: goto joshua не требуется, поскольку Джошуа находится на самой следующей строке.
  • Строка 9: cls стирает предыдущее эхо (скрывает Hello %name%.)
  • Строка 16, 17, 30 и 31: переменные должны быть заключены в кавычки, иначе неожиданный ввод (например, hell no!!! или yes, i am.) вызовет синтаксическую ошибку
  • Строка 18, 25 и 32: регистр по умолчанию отсутствует, поэтому, если ответ не «Да» и «Нет», сценарий переходит к следующей строке.

Я бы также предложил изменить эти операторы if на if-else и использовать сравнение строк без учета регистра с if /I. Попробуйте эти модификации:

@echo off

:joshua
echo Hello. My name is Joshua.
echo What is yours?
set /p name=
cls
echo Hello, %name%.
echo How are you?
set /p feeling=
cls

echo Is this good?
echo I'm sorry. I am still learning human feelings.
set /p humanfeelings=Yes/No 

if /I "%humanfeelings%"=="yes" (
    goto Good
) else (
    goto Bad
) 
cls

:Good
echo Well that is pleasant.
goto AskPlay

:Bad
echo That is not good.

:AskPlay
echo Would you like to play a game, %name%?
set /p answera=Yes/No
if /I "%answera%"=="yes" (
    goto startmenu
) else (
    goto later
)
cls

:startmenu
start menu.bat
cls

:later
echo That is fine, %name%. Maybe later!
pause
exit
1 голос
/ 23 января 2011

Хорошо, из того, что я вижу здесь неправильно, вы не прыгаете никуда в конце обработки Good / Bad. Это означает, что независимо от того, введете ли вы «Да» или «Нет», блоки Bad / startmenu / позже всегда выполняются, один за другим. Это проблема у вас? Затем просто добавьте еще несколько goto-s.

0 голосов
/ 23 января 2011

Попробуйте удалить пробел перед словом No в следующих строках:

if %answer%== No goto quit

и

if %answera%== No goto later

Как и многие из нас, кто пережил нашу полезность, пакетный переводчик старый и суетливый. : -)

0 голосов
/ 23 января 2011

Вы вводите полный ответ Да или Нет в ответ на подсказки? Если вы сокращаете Y и N, будут сохранены только эти начальные символы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...