Batch file 批处理文件";“回声”;和函数输出不正确

Batch file 批处理文件";“回声”;和函数输出不正确,batch-file,Batch File,我的“回声”输出有问题 我有3个功能(Speak、SpeakByChoice、SpeakChoose)和1个标签(Play) 这是我到目前为止的代码 @ echo off title Text Story Game :Main color 9f echo ====== Main Menu ====== echo 1) Play echo 2) Password echo 3) Quit set /p mainMenuChoice= if %mainMenuChoice% == 1 goto P

我的“回声”输出有问题

我有3个功能(Speak、SpeakByChoice、SpeakChoose)和1个标签(Play)

这是我到目前为止的代码

@ echo off
title Text Story Game

:Main
color 9f
echo ====== Main Menu ======
echo 1) Play
echo 2) Password
echo 3) Quit
set /p mainMenuChoice=
if %mainMenuChoice% == 1 goto Play
if %mainMenuChoice% == 2 goto Password
if %mainMenuChoice% == 3 exit
goto Main

:Play
REM Gameplay Start
call :Speak "Mayor" "Mmm, oh, I didn't see you there!"
call :Speak "Mayor" "Hello there! Welcome to Rockwell Town, er...who are you?"
set /p name= Choose your name: 
call :Speak "Mayor" "Oh, why hello %name%! Good to meet you."
call :Speak "Mayor" "What did you come here for?"
call :SpeakChoose "I need a favor done." "Um, nothing..." (here is problem)
pause
pause

:Speak
echo.
echo [ %~1 ^>^> %~2 ] 
pause>nul
goto :EOF

:SpeakByChoice
echo.
call :Speak %~1 %~2
call :Speak %~3 %~4
goto :EOF

:SpeakChoose
echo.
echo [ Choice: ]
echo 1) %~1
echo 2) %~2
set /p SpeakChoose=
if %SpeakChoose% == 1 call :SpeakByChoice "%name%" "%~1" "Mayor" "Okay, what can I help you with?" 
if %SpeakChoose% == 2 call :SpeakByChoice "%name%" "%~2" "Mayor" "Oh okay....wait a minute. Didn't you ask me about moving in earlier?"
goto :EOF

:DNCSpeakChoose
echo.
echo You didn't choose anything.....
call :Speak "%name%" "..."
尽管输出是这样的:

我的名字是“(空白)”,但在SpeakByChoice调用中显示为“I”,但在其他调用(如Speak)中不显示

====== Main Menu ======
1) Play
2) Password
3) Quit
1

[ Mayor >> Mmm, oh, I didn't see you there! ] ↓

[ Mayor >> Hello there! Welcome to Rockwell Town, er...who are you? ] ↓
Choose your name: (not chosen...)

[ Mayor >> Oh, why hello (blank name IS here) ! Good to meet you. ] ↓

[ Mayor >> What did you come here for? ] ↓

[ Choice: ]
1) I need a favor done.
2) Um, nothing...
1


[ I (who is I?? this should've been blank) >> need ] ↓

[ Mayor >> Okay ] ↓
Press any key to continue . . .
Press any key to continue . . .

我不确定是什么引发了这个问题。是跟SETLOCAL有关,还是我的:EOF,我不知道。但是我的Speak和SpeakChoose函数工作得很好,但我的SpeakByChoose却不行。

只需添加一些引号。这对我很有效

@echo off
title Text Story Game

:Main
color 9f
echo ====== Main Menu ======
echo 1) Play
echo 2) Password
echo 3) Quit
set /p mainMenuChoice=
if %mainMenuChoice% == 1 goto Play
if %mainMenuChoice% == 2 goto Password
if %mainMenuChoice% == 3 exit
goto Main

:Play
REM Gameplay Start
call :Speak "Mayor" "Mmm, oh, I didn't see you there!"
call :Speak "Mayor" "Hello there! Welcome to Rockwell Town, er...who are you?"
set /p name= Choose your name: 
call :Speak "Mayor" "Oh, why hello %name%! Good to meet you."
call :Speak "Mayor" "What did you come here for?"
call :SpeakChoose "I need a favor done." "Um, nothing..." (here is problem)
pause
pause

:Speak
echo.
echo [ %~1 ^>^> %~2 ] 
pause>nul
goto :EOF

:SpeakByChoice
echo.
call :Speak "%~1" "%~2"
call :Speak "%~3" "%~4"
goto :EOF

:SpeakChoose
echo.
echo [ Choice: ]
echo 1) %~1
echo 2) %~2
set /p SpeakChoose=
if %SpeakChoose% == 1 call :SpeakByChoice "%name%" "%~1" "Mayor" "Okay, what can I help you with?" 
if %SpeakChoose% == 2 call :SpeakByChoice "%name%" "%~2" "Mayor" "Oh okay....wait a minute. Didn't you ask me about moving in earlier?"
goto :EOF

:DNCSpeakChoose
echo.
echo You didn't choose anything.....
call :Speak "%name%" "..."

只需添加一些引号。这对我很有效

@echo off
title Text Story Game

:Main
color 9f
echo ====== Main Menu ======
echo 1) Play
echo 2) Password
echo 3) Quit
set /p mainMenuChoice=
if %mainMenuChoice% == 1 goto Play
if %mainMenuChoice% == 2 goto Password
if %mainMenuChoice% == 3 exit
goto Main

:Play
REM Gameplay Start
call :Speak "Mayor" "Mmm, oh, I didn't see you there!"
call :Speak "Mayor" "Hello there! Welcome to Rockwell Town, er...who are you?"
set /p name= Choose your name: 
call :Speak "Mayor" "Oh, why hello %name%! Good to meet you."
call :Speak "Mayor" "What did you come here for?"
call :SpeakChoose "I need a favor done." "Um, nothing..." (here is problem)
pause
pause

:Speak
echo.
echo [ %~1 ^>^> %~2 ] 
pause>nul
goto :EOF

:SpeakByChoice
echo.
call :Speak "%~1" "%~2"
call :Speak "%~3" "%~4"
goto :EOF

:SpeakChoose
echo.
echo [ Choice: ]
echo 1) %~1
echo 2) %~2
set /p SpeakChoose=
if %SpeakChoose% == 1 call :SpeakByChoice "%name%" "%~1" "Mayor" "Okay, what can I help you with?" 
if %SpeakChoose% == 2 call :SpeakByChoice "%name%" "%~2" "Mayor" "Oh okay....wait a minute. Didn't you ask me about moving in earlier?"
goto :EOF

:DNCSpeakChoose
echo.
echo You didn't choose anything.....
call :Speak "%name%" "..."

如果取消引用,请在调用中的参数周围加双引号<代码>调用:在SpeakByChoice中说出“%~1”“%~2”,如果取消引用,请在调用中的参数周围加上双引号<代码>调用:在speakbychoice中说“%~1”“%~2”