2017-12-12 3 views
2

Ich schreibe ein Batch-Skript, das Befehle empfängt und sie ausführt. Ich muss die Eingabe des Benutzers für eine Zeichenfolge am Ende der Eingabe untersuchen. Angenommen, ein Benutzer gibt ECHO Hello World & ECHO ON ein und die Variable, in der dieser Befehl gespeichert ist, lautet %CHO%. Wie kann ich die & ECHO ON am Ende der Variablen finden?Suche Zeichenfolge am Ende der Variablen - Batch Scripting

Ich habe bereits eine Möglichkeit, ECHO ON & in der Eingabe zu finden, aber ich brauche eine Möglichkeit zu überprüfen, ob & ECHO ON ist am Ende der Variablen. Wenn ich nur nach & ECHO ON suchen sollte, kann das Skript leicht & ECHO ONWARDS oder etwas ähnliches verwechseln und denken, dass es tatsächlich & ECHO ON ist.

Irgendwelche Ideen, wie dies getan werden kann?

+4

Sie können einen Teilstring wie in der Hilfedatei für den Befehl 'SET' beschrieben verwenden. 'IF/I" Echo auf "=="% cho: ~ -7% "Echo Match' – Squashman

Antwort

1

versuchen, diese - es sollte in der Lage sein, spezielle Symbole zu behandeln (es verwendet endsWith Unterprogramm):

@echo off 

:::example calls of :endsWith subroutine 

call :endsWith abcdefgh fgh 
echo %errorlevel% 
call :endsWith abcdefgh abc 
echo %errorlevel% 

exit /b 0 

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
:endsWith [%1 - string to be checked;%2 - string for checking ] 
@echo off 
rem :: sets errorlevel to 1 if %1 ends with %2 else sets errorlevel to 0 
setlocal EnableDelayedExpansion 

set "string=%~1" 
set "checker=%~2" 

set LF=^ 


rem ** Two empty lines are required 
rem echo off 
for %%L in ("!LF!") DO (
    for /f "delims=" %%R in ("!checker!") do ( 
     set "var=!string:%%~R=%%L#!" 
    ) 
) 

for /f "delims=" %%P in (""!var!"") DO (
    set "temp=%%~P" 
) 

if "%temp%" EQU "#" (
    endlocal & exit /b 1 
) else (
    endlocal & exit /b 0 
) 
goto :eof 
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 

Sie auch FINDSTR (wahrscheinlich langsamer sein wird, wie es auf externe Befehle beruht) verwenden können:

echo abcdefgh| findstr /e "fgh" >nul 2>nul && (
    echo ends with 
)||(
    echo does not ends with 
) 
+0

Interessant, scheint ein bisschen viel. Gibt es einen einfacheren Weg? –

+0

@ChristianSirolli - überprüfe mein Update (du musst vielleicht noch ein paar Tricks für die speziellen Symbole hinzufügen) .Obwohl du den Code als Standalone-Funktion verwenden kannst, ohne dich um die Komplexität zu kümmern – npocmaka

+0

Wie benutze ich ihn als eigenständige Funktion? –

Verwandte Themen