我正在使用批处理文件来搜索函数列表以进行完全匹配,想知道是否可以改为进行关键字搜索

I am using a Batch File to search a list of functions for an exact match, wondering if its possible to do a keyword search instead

我正在使用批处理文件来搜索函数列表以进行完全匹配,想知道是否可以进行关键字搜索,所以现在我必须输入 "open cmd" (考虑了间距和大写字母的变化) 我想将它切换到一个可以查找 "cmd" 并执行操作的系统,这样 "hey, open cmd please" 就会产生与旧系统相同的结果

旧系统:

setlocal
:: /STARTUP
set speech=start scripts\nircmd.exe speak text
cls
:begin
set TALK=TypeSomething
SET /P TALK=
set TALK=%TALK:?=%
call :%TALK: =% 2>NUL
if %errorlevel% equ 0 goto begin
exit /B 0
:unknown
echo Old function no longer supported 
:opencmd
:BOSopencmd
:cmd
echo Command Prompt has now been opened in a new window, sir.
%speech% "Command Prompt has now been opened in a new window, sir."
start scripts\cmd.bat
exit /B 0

它基于我在中学时尝试制作的聊天机器人,因此 %speech% 不是重要的项目,我可以稍后添加它和 echo。如果可能的话,我只需要一个像旧系统一样工作的系统。另一个我可以使用

拥有任意数量的功能
:cmd
start cmd
Exit /B 0

:reddit
start http://www.reddit.com/
exit /B 0

在这些需要能够堆叠。如果需要,我可以过渡到在单独的批处理文件中为每个函数编写脚本。我试过尝试 findstr 但它没有给出预期的结果。我已经用尽了我的知识,我可能会做什么,但我想出了一个简短的哈哈,如果你在理解我的问题时遇到困难,请不要犹豫,让我知道

我通过拆解来学习,所以部分代码值得赞赏,但在我弄清楚什么是什么之前不会有太大帮助。

这是一个示例,说明您可以如何使用 ECHOFINDSTRCALL(这是根据您的请求对原始示例进行修改,以便能够处理多个关键字):

@echo off
set TST_FNDFLG=FALSE
set TST_USRANS=
set /P TST_USRANS=Enter keywords: 
if "%TST_USRANS%" == "" goto ENDIT
echo %TST_USRANS% | findstr /i "CMD" >NUL 2>&1
if ERRORLEVEL 1 goto TRYRED
call :DOCMD
:TRYRED
echo %TST_USRANS% | findstr /i "REDDIT" >NUL 2>&1
if ERRORLEVEL 1 goto TRYGOO
call :DORED
:TRYGOO
echo %TST_USRANS% | findstr /i "GOOGLE" >NUL 2>&1
if ERRORLEVEL 1 goto TRYEND
call :DOGOO
goto TRYEND
:DOCMD
if [%TST_FNDFLG%] == [FALSE] echo.
echo   CMD was found in "%TST_USRANS%"
set TST_FNDFLG=TRUE
goto :EOF
:DORED
if [%TST_FNDFLG%] == [FALSE] echo.
echo   REDDIT was found in "%TST_USRANS%"
set TST_FNDFLG=TRUE
goto :EOF
:DOGOO
if [%TST_FNDFLG%] == [FALSE] echo.
echo   GOOGLE was found in "%TST_USRANS%"
set TST_FNDFLG=TRUE
goto :EOF
:TRYEND
echo.
if [%TST_FNDFLG%] == [TRUE]  echo No more keywords found
if [%TST_FNDFLG%] == [FALSE] echo Did not find any known keywords
goto ENDIT
:ENDIT
echo.
set TST_USRANS=
set TST_FNDFLG=