You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Batch批处理代码实现聊天机器人回复内容单行输出

修改方案

核心逻辑是新增临时变量暂存所有命中规则的回复内容,所有匹配流程执行完成后统一输出单行内容:

  1. 每次接收用户输入后先清空临时回复变量
  2. 调整原回复子程序,取消直接打印逻辑,改为将回复内容追加到临时变量
  3. 所有匹配规则执行完成后,统一打印机器人前缀+合并后的回复内容

修改后完整代码

@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:36:04