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



我正在使用批处理文件搜索函数列表以查找完全匹配,想知道是否可以进行关键字搜索,所以现在我必须键入"打开cmd" (考虑了间距和大写字母的变化( 我想将其切换到可以查找" cmd"并执行操作的系统,以便"嘿,请打开cmd"将产生与旧系统相同的结果

旧系统:

setlocal
:: /STARTUP
set speech=start scriptsnircmd.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 scriptscmd.bat
exit /B 0

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

: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=

相关内容

最新更新