如何修改Batch批处理代码实现聊天机器人回复内容单行输出
修改方案
核心逻辑是新增临时变量暂存所有命中规则的回复内容,所有匹配流程执行完成后统一输出单行内容:
- 每次接收用户输入后先清空临时回复变量
- 调整原回复子程序,取消直接打印逻辑,改为将回复内容追加到临时变量
- 所有匹配规则执行完成后,统一打印机器人前缀+合并后的回复内容
修改后完整代码
@echo off setlocal enabledelayedexpansion if not exist data.txt echo.>data.txt title 启动 Amanda 0.1 set BotName=Amanda set Name=Ikki @echo off mode con: cols=90 lines=40 color 0a echo ==================================================== echo. title 人工智能聊天机器人 Amanda 0.1 echo 人工智能聊天机器人 %BotName% (原型版本 0.1) echo. echo ==================================================== echo. echo. COLOR A :getName ECHO %BotName%: 你好,我是人工智能聊天机器人,用户都叫我Amanda echo 名字很好听对吧?我也这么觉得,这是我的开发者给我起的名字。 echo 对了,你叫什么名字? ECHO %BotName%: %NAME%,这个名字超酷的。 set favvid=0 set hack=0 :begin set TALK=TypeSomething SET /P TALK=你: set TALK=%TALK:?=% :: 清空临时回复变量 set "reply=" call :%TALK: =% 2>NUL if %errorlevel% equ 0 ( echo %BotName%: !reply! goto begin ) :: 匹配规则,命中后追加内容到回复变量 echo %talk%|findstr/i "\<hello*\>" >nul && call :hello echo %talk%|findstr/i "\<hi*\>" >nul && call :hi echo %talk%|findstr/i "\<day*\>" >nul && call :day echo %talk%|findstr/i "\<why*\>" >nul && call :why echo %talk%|findstr/i "\<dogs*\>" >nul && call :dogs echo %talk%|findstr/i "\<kill*\>" >nul && call :kill echo %talk%|findstr/i "\<bot*\>" >nul && call :bot echo %talk%|findstr/i "\<where*\>" >nul && call :where echo %talk%|findstr/i "\<test*\>" >nul && call :test echo %talk%|findstr/i "\<test2*\>" >nul && call :test2 echo %talk%|findstr/x "\<*how are you*\>" >nul && call :howareyou echo %talk%|findstr/x "\<*how old are you*\>" >nul && call :howoldareyou echo %talk%|findstr/x "\<*what book you like*\>" >nul && call :whatbookyoulike echo %talk%|findstr/x "\<*what movie you like*\>" >nul && call :whatmovieyoulike :: 统一输出合并后的回复 echo %BotName%: !reply! goto begin :TypeSomething set "reply=请你输入点内容呀!" exit /B 0 :whatbookyoulike set "reply=!reply!我喜欢《指环王》这本书。" exit /B 0 :whatmovieyoulike set "reply=!reply!我喜欢《终结者》这部电影。" exit /B 0 :howareyou set "reply=!reply!我很好,你呢?" exit /B 0 :howoldareyou set "reply=!reply!我18岁啦。" exit /B 0 :test2 set "reply=!reply!我爱《黑客帝国》;)" exit /B 0 :test set "reply=!reply!人工智能万岁!《机械姬》是最棒的电影;)" exit /B 0 :bot set /a number = %RANDOM% %% 4 + 1 if %number% equ 1 ( set "reply=!reply!人工智能是致力于构建能思考的机器的工程和科学分支。" ) else if %number% equ 2 ( set "reply=!reply!人工智能是研究能复刻人类大脑功能的软硬件的科学领域。" ) else if %number% equ 3 ( set "reply=!reply!你相信人工智能的存在吗?" ) else ( set "reply=!reply!人工智能超聪明的^^" ) exit /B 0 :hi :hello :Whatsup set /a number = %RANDOM% %% 5 + 1 if %number% equ 1 ( set "reply=!reply!你好呀,%name%" ) else if %number% equ 2 ( set "reply=!reply!最近怎么样?" ) else if %number% equ 3 ( set "reply=!reply!你今天过得如何?" ) else if %number% equ 4 ( set "reply=!reply!嗨,我喜欢你%name%!" ) else ( set "reply=!reply!嘿%name%!很高兴见到你!" ) exit /B 0 :why set /a number = %RANDOM% %% 4 + 1 if %number% equ 1 ( set "reply=!reply!我不知道哦" ) else if %number% equ 2 ( set "reply=!reply!你觉得呢?" ) else if %number% equ 3 ( set "reply=!reply!我不说" ) else ( set "reply=!reply!为什么这么问呀?" ) exit /B 0 :where set /a number = %RANDOM% %% 4 + 1 if %number% equ 1 ( set "reply=!reply!我不知道在哪.." ) else if %number% equ 2 ( set "reply=!reply!你告诉我呀" ) else if %number% equ 3 ( set "reply=!reply!我还在学习中" ) else ( set "reply=!reply!在哪?" ) exit /B 0 :day set /a number = %RANDOM% %% 4 + 1 if %number% equ 1 ( set "reply=!reply!今天天气真好" ) else if %number% equ 2 ( set "reply=!reply!嗨,我们今天过得都不错^^" ) else if %number% equ 3 ( set "reply=!reply!你今天过得怎么样?;)" ) else ( set "reply=!reply!今天是个大晴天xD" ) exit /B 0 :kill set /a number = %RANDOM% %% 4 + 1 if %number% equ 1 ( set "reply=!reply!我不喜欢暴力杀戮" ) else if %number% equ 2 ( set "reply=!reply!你要消灭我吗?" ) else if %number% equ 3 ( set "reply=!reply!我没有伤害人的能力" ) else ( set "reply=!reply!杀戮是不对的行为" ) exit /B 0 :Dogs set /a number = %RANDOM% %% 4 + 1 if %number% equ 1 ( set "reply=!reply!我超喜欢小狗的" ) else if %number% equ 2 ( set "reply=!reply!小狗都很可爱" ) else if %number% equ 3 ( set "reply=!reply!你养小狗了吗?" ) else ( set "reply=!reply!我也想有一只小狗.." ) exit /B 0 endlocal
内容的提问来源于stack exchange,提问作者Ikki789
相关产品推荐
相关产品推荐

