2014-11-15 7 views
6

Ich habe versucht, die Lösungen an vielen Stellen zu finden, konnte aber keine spezifische Antwort finden.Batch-Programm suchen Zeichenfolge in Variable

Ich erstelle ein Batch-Skript. Das folgende ist mein Code so weit

@echo off 
    SETLOCAL EnableDelayedExpansion 
    cls 
    for /f "delims=" %%a in ('rasdial EVDO cdma cdma') do set "ras=!ras! %%a" 

    findstr /C:"%ras%" "already" 

    if %errorlevel% == 0 
    (
     echo "it says he found the word already" 
    ) 
    else 
    (
     echo "it says he couldn't find the word already" 
    ) 

OUTPUT:

FINDSTR: Cannot open already 
    The syntax of the command is incorrect. 

Ich versuche, das Wort zu finden 'schon' in der Variablen 'ras',

Das Problem scheint zu sein, in findstr/C: "% ras%" "schon"

habe ich versucht, mit findstr "% ras%" "schon" aber das funktioniert auch nicht.

Antwort

0

"Die Syntax des Befehls ist falsch." wird für 'else' gemeldet, das in der Stapelbefehlszeile nicht vorhanden ist.

Für

findstr /c:"str" file 

Hier str ist die wörtliche durchsucht werden, und Datei ist die Dateinamen-Suche durchführen. Das entspricht also nicht Ihren Anforderungen.

Ich denke, das Folgende ist, was Sie brauchen.

rasdial EVDO cdma cdma | findstr already > NUL 

if %errorlevel% EQU 0 (
    echo "it says he found the word already" 
) 

if %errorlevel% NEQ 0 (
    echo "it says he couldn't find the word already" 
) 
1

Scheint ich schon die Lösung gefunden ..

echo %ras% | findstr "already" > nul 

und @Karata ich nicht

rasdial EVDO cdma cdma | findstr already > NUL 

weil ich Skript für mehrere Fälle schreibe verwenden können, und ich möchte speichern Ausgabe in einer Variablen .. Danke sowieso.

6

Es gibt zwei Probleme in Ihrem Code.

Die erste ist, wie findstr funktioniert. Für jede Zeile in ihrer Eingabe prüft sie, ob die Zeile den angegebenen literalen oder regulären Ausdruck enthält (oder nicht). Die Eingabezeilen, die getestet werden sollen, können aus einer Datei oder aus dem Standard-Eingabestream gelesen werden, aber nicht aus den Argumenten in der Befehlszeile. Der einfachste Weg, es zu Rohr der Leitung in den findstr Befehl

echo %ras% | findstr /c:"already" >nul 

Das zweite Problem ist, wie der if Befehl geschrieben wird.Die öffnende Klammer muss in der gleichen Zeile wie die Bedingung else in der gleichen Zeile wie die erste schließende Klammer und die öffnende Klammer in der else-Klausel in derselben Zeile sein wie die else-Klausel (siehe here).

if condition (
    code 
) else (
    code 
) 

Aber für Vorhandensein des Zeichenfolge in den variablen zu testen, ist es einfacher

if "%ras%"=="%ras:already=%" (
    echo already not found 
) else (
    echo already found 
) 

Dies wird prüfen, ob der Wert in den variablen zu tun, gleich der ist auf den gleichen Wert mit der String already durch nichts ersetzt.

Für Informationen über Variable Bearbeiten/Ersetzen aussehen here.

+0

Sehr schlau der Ersatz String Trick! Ich habe viele Beispiele mit Tonnen von 'find' und ähnlichem gesehen, aber das ist sehr schnell und sauber und einfach zu verstehen! – Gruber

Verwandte Themen