2017-08-08 1 views
1

Ich verwende eine Batch-Datei, um eine Liste von Funktionen für eine exakte Übereinstimmung zu suchen, frage mich, ob es möglich, eine Schlüsselwortsuche zu tun, also muss ich jetzt "open cmd" eingeben (Variationen über Abstand und Großbuchstaben werden berücksichtigt) ID möchte es auf ein System umschalten, das nach "cmd" suchen und durchführen kann die Aktion so: "hey, offene cmd bitte" würde das gleiche Ergebnis wie das alte SystemIch verwende eine Batch-Datei, um eine Liste von Funktionen für eine exakte Übereinstimmung zu suchen, frage mich, ob es möglich ist, eine Schlüsselwortsuche statt

Old System ergeben:

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 

Es basiert auf einem Chat-Bot, den ich in der Mittelschule machen wollte, also ist%%% kein wichtiger Gegenstand, ich kann das und das Echo später hinzufügen. Ich brauche nur ein System, das nach Möglichkeit wie das alte funktioniert. Die andere i

eine beliebige Anzahl von Funktionen mit haben kann
:cmd 
start cmd 
Exit /B 0 

oder

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

auf diese müssen in der Lage zu stapeln. Ich kann bei Bedarf Skripts für jede Funktion in separaten Stapeldateien verwenden. Ich habe versucht, findstr zu versuchen, aber es gab nicht die gewünschten Ergebnisse. Ive erschöpfte mein Wissen darüber, was ich tun könnte, aber ich bin kurz gekommen lol, Wenn Sie Probleme haben zu verstehen, was ich frage, zögern Sie nicht, mich wissen zu lassen

Ich lerne, indem ich Dinge auseinander nehmen so ein teilweiser code wird geschätzt, aber wird nicht viel helfen, bis ich herausgefunden habe, was was macht.

+0

Sind Sie bereit, Verwenden Sie eine temporäre Datei als Teil des Prozesses oder möchten Sie Datei-E/A vermeiden? –

+0

Ich bin offen für alles, wenn Sie bereit sind zu helfen – Flashbang941

Antwort

0

Hier ist ein Beispiel, wie Sie es ECHO mit nähern könnte, FINDSTR und CALL (Dies ist ein modifiziertes Beispiel von der ursprünglichen pro Ihre Anfrage mehrere Keywords bearbeiten können):

@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

Ich denke, ich bekomme es so weit, aber ich brauche es, um mit mehr Keywords – Flashbang941

+0

zu arbeiten, was ich mit mehr Schlüsselwörtern meine, ist mit der alten Art, die ich benutzte ich konnte stapeln ': cmd' 'start cmd' 'Exit/B 0' oben auf ': reddit' 'starten http://www.reddit.com/' 'exit/B 0' ohne Leerzeichen – Flashbang941

+0

Ja, dieses Beispiel zeigt lediglich, wie nach Schlüsselwörtern gesucht wird und nicht nach ganzen Strings. Sie müssen dies jedoch für Ihre Verwendung im ursprünglichen Skript anpassen. Sie können die 'ECHO'/'FINDSTR'-Schleife durchlaufen und die Schlüsselwörter extrahieren, auf die Sie bereits reagiert haben. Ich würde den 'CALL'-Befehl verwenden, um eine Subroutine zu erstellen, die diese Entfernung durchführt. –

Verwandte Themen