2017-08-08 35 views
1

我正在使用批处理文件来搜索完全匹配的函数列表,可能做关键词搜索,所以现在我必须键入“打开cmd” (对间距和大写字母的变化考虑在内) 我想将它切换到可以查找“cmd”并执行动作如此“哎,打开CMD讨好”会产生相同的结果,旧系统我正在使用批处理文件来搜索完全匹配的函数列表,想知道是否可以执行关键字搜索而不是

旧系统:

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 

它是基于我试图在中学做的聊天机器人,所以%语音%不是重要的项目,我可以在稍后添加该内容并回显。如果可能的话,我只需要一个像旧的那样工作的系统。另我可以具有任何数量的功能与

:cmd 
start cmd 
Exit /B 0 
在这些

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

需要能够堆叠。如果需要,我可以转换为在单独的批处理文件中为每个函数创建脚本。我曾尝试尝试findstr,但它没有给出预期的结果。我已经用尽我的知识,我可以做什么,但我已经短暂的大声笑,如果你不明白我在问什么,请不要犹豫,让我知道

我学会把事情分开所以部分代码是赞赏,但不会有太大的帮助,直到我找出什么是什么。

+0

你是否愿意使用tempfile作为进程的一部分,还是希望避免文件I/O? –

+0

我愿意接受任何事情如果你愿意帮助 – Flashbang941

回答

0

这里有一个如何使用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= 
+0

我想我有点得到它,但我需要它能够与更多的关键字 – Flashbang941

+0

我的意思是更多的关键字是我用旧的方式我可以堆叠 ':CMD' 上的 顶部 '启动CMD' '退出/ B 0' ':书签交易' '开始http://www.reddit.com/' '退出/ B 0' 没有空格 – Flashbang941

+0

是的,这个例子仅仅展示了如何搜索关键字而不是匹配整个字符串。您仍然需要修改此脚本以便在原始脚本中使用。 您可以通过循环'ECHO' /'FINDSTR'循环并提取出您已经执行的关键字。我会使用'CALL'命令来设计一个子程序来执行删除操作。 –

相关问题