Function 调用函数不工作?

Function 调用函数不工作?,function,batch-file,call,cls,Function,Batch File,Call,Cls,我正在批量制作一个“选择你自己的冒险”游戏,我想在其中添加统计数据,以跟踪你在游戏中的表现。我想显示统计数据,但每次我有cls命令时都必须显示,因为我经常使用该命令,所以我创建了一个名为:stats的块,以便每次需要时都可以调用它。它工作得很好,但是统计数据显示后的叙述似乎不再有效了。我想保留:colorEcho块,这样玩家就可以区分对话、叙述和输入选项的命令。有没有办法解决这个问题 :Start ::Game goes here. cls Echo Please enter your play

我正在批量制作一个“选择你自己的冒险”游戏,我想在其中添加统计数据,以跟踪你在游戏中的表现。我想显示统计数据,但每次我有
cls
命令时都必须显示,因为我经常使用该命令,所以我创建了一个名为
:stats
的块,以便每次需要时都可以调用它。它工作得很好,但是统计数据显示后的叙述似乎不再有效了。我想保留
:colorEcho
块,这样玩家就可以区分对话、叙述和输入选项的命令。有没有办法解决这个问题

:Start
::Game goes here.
cls
Echo Please enter your player name.
set /p PlayerName="Player name: "
cls
call :Stats
call :colorEcho 7 "You lay on the cold, hard ground, sleeping away. It's   been 1 month since the Virus spread..."
Echo.
call :colorEcho 7 "The sun rises over the horizon, warming up your dirt-caked body."
Echo . 
pause
exit

:Stats
call :colorEcho A "Current Health = "
call :colorEcho C " %Health%"
Echo.
call :colorEcho A "Hunger = "
call :colorEcho C " %Food%"
Echo.
call :colorEcho A "Thirst = "
call :colorEcho C " %Water%"
Echo.
call :colorEcho A "Infection = "
call :colorEcho C " %Infection%"
Echo. 
call :colorEcho A "Stamina = "
call :colorEcho C " %Stamina%"
Echo.
Echo.
pause

:colorEcho
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1i
:开始
当前位置游戏就在这里。
cls
请输入您的球员姓名。
set/p PlayerName=“玩家名称:”
cls
呼叫:统计
呼叫:colorEcho 7“你躺在冰冷坚硬的地面上,睡不着。病毒传播已经一个月了……”
回响
呼叫:colorEcho 7“太阳从地平线上升起,温暖你那结满污垢的身体。”
回响
暂停
出口
:统计数据
调用:colorEcho A“当前运行状况=”
调用:colorEcho C“%Health%”
回响
调用:colorEcho A“饥饿=”
呼叫:colorEcho C“%Food%”
回响
调用:colorEcho A“口渴=”
调用:colorEcho C“%Water%”
回响
调用:colorEcho A“感染=”
调用:colorEcho C“%Infection%”
回响
调用:colorEcho A“耐力=”
呼叫:colorEcho C“%Stamina%”
回响
回响
暂停
:彩色回波
回音
"%~2"
findstr/v/a:%1/R“^$”“%~2”个
删除“%~2”>nul 2>&1i
旁注:我已经定义了所有变量。这是我确定的

应该发生什么:

实际发生的情况:


您忘记回拨到另一个街区了

@echo off
SETLOCAL EnableDelayedExpansion
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do     rem"') do (
  set "DEL=%%a"
)
title Ace
set Health=100
set Food=100
set Water=100
set Infection=100
set Stamina=100
color A
Echo Welcome, %USERNAME% to Ace, a crudely made Choose-Your-Own-Adventure game. You must complete 

this in one try. 
call :colorEcho A "There is" 
call :colorEcho C " no saving" 
Echo . Are you ready?
Echo Your options are:
call :colorEcho C "================="
Echo.
Echo 1. Yes
Echo 2. No
call :colorEcho C "================="
Echo.
Echo Please enter the number corresponding to your answer.
set /p Answer1="Enter your choice: "
if "%Answer1%" == "1" goto Start
if "%Answer1%" == "2" goto Quit

:Quit
Echo You have chosen to quit.
pause
exit

:Start
::Game goes here.
cls
Echo Please enter your player name.
set /p PlayerName="Player name: "
cls
call :Stats

Echo.
call :colorEcho C "You lay on the cold, hard ground, sleeping away. It's been 1 month since the Virus 

spread"
Echo.
call :colorEcho C "The sun rises over the horizon, warming up your dirt-caked body."
Echo. 
pause
exit

:Stats
call :colorEcho A "Current Health = "
call :colorEcho C " %Health%"
Echo.
call :colorEcho A "Hunger = "
call :colorEcho C " %Food%"
Echo.
call :colorEcho A "Thirst = "
call :colorEcho C " %Water%"
Echo.
call :colorEcho A "Infection = "
call :colorEcho C " %Infection%"
Echo. 
call :colorEcho A "Stamina = "
call :colorEcho C " %Stamina%"
EXIT /B
Echo.
Echo.

:colorEcho
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1i
@echo关闭
SETLOCAL EnableDelayedExpansion
对于/F“tokens=1,2 delims=#”%%a in(‘“prompt#$H#$E#&echo on&for%%b in(1)do rem“’)do(
设置“DEL=%%a”
)
王牌
设置运行状况=100
设置食物=100
设定水=100
设定感染率=100
设定耐力=100
颜色A
回声欢迎,%USERNAME%加入Ace,这是一款粗糙制作的选择你自己的冒险游戏。你必须完成
这是一次尝试。
呼叫:colorEcho“有”
调用:colorEcho C“不保存”
回响你准备好了吗?
您的选择包括:
呼叫:colorEcho C“===============================”
回响
回声1。对
回声2。不
呼叫:colorEcho C“===============================”
回响
请输入与您的答案对应的号码。
set/p Answer1=“输入您的选择:”
如果“%Answer1%”==“1”转到开始
如果“%Answer1%”==“2”转到退出
:退出
Echo您已选择退出。
暂停
出口
:开始
当前位置游戏就在这里。
cls
请输入您的球员姓名。
set/p PlayerName=“玩家名称:”
cls
呼叫:统计
回响
呼叫:colorEcho C“你躺在冰冷坚硬的地面上,睡不着。自从病毒爆发已经一个月了
蔓延”
回响
呼叫:colorEcho C“太阳从地平线上升起,温暖你那结满污垢的身体。”
回响
暂停
出口
:统计数据
调用:colorEcho A“当前运行状况=”
调用:colorEcho C“%Health%”
回响
调用:colorEcho A“饥饿=”
呼叫:colorEcho C“%Food%”
回响
调用:colorEcho A“口渴=”
调用:colorEcho C“%Water%”
回响
调用:colorEcho A“感染=”
调用:colorEcho C“%Infection%”
回响
调用:colorEcho A“耐力=”
呼叫:colorEcho C“%Stamina%”
退出/B
回响
回响
:彩色回波
回音
"%~2"
findstr/v/a:%1/R“^$”“%~2”个
删除“%~2”>nul 2>&1i

您忘记了子例程末尾的
exit/b
goto:eof
,因此
:Start
属于
:colorEcho
。这到底是做什么的?您认为
:derp
标签的目的是什么??如果您尝试像这样返回到主例程,您可能会超过嵌套调用的限制…derp标签是必需的不,绝对不是!您所要做的就是按照中的建议,在
:colorecho
之前插入
退出/B
转到:EOF
。我知道您可以做到这一点。我是说这样的事是必须的。