2016-06-29 2 views
1

Ich habe eine Datei myFile.txt mit einer Reihe von Zeichenfolgen. Ich schrieb die folgende Batch-Datei durch die Leitungen in einer Schleife, und eine Linie drucken, wenn es eine bestimmte Zeichenfolge entspricht (im Interesse der Demo, wähle ich jetzt die Zeichenfolge foo):Windows Batch-Datei - Zeichenfolge Vergleich mit Platzhalter

@echo off 
    setlocal enableextensions enabledelayedexpansion 

    for /f %%i in (myFile.txt) do (

     line=%%i 
     if !line! EQU foo* (
      echo !line! 
     ) 

    ) 

In meiner Anwendung habe ich nicht nur müssen Zeilen drucken, die genau foo entsprechen, aber auch die Zeilen, die passen fooBar, fooBarFred, fooFred, ... Deshalb habe ich einen Platzhalter dort.

Aber es funktioniert nicht ..

Bitte helfen.

Antwort

4
findstr /b "foo" myfile.txt 

/b: Zeile mit der Zeichenfolge beginnen sollte

könnte auch nützlich sein:

/i: Kapitalisierung ignorieren (Finden Sie foo, Foo, foo, ...)

Weitere Optionen finden Sie unter findstr /?

+0

Danke Stephan. Ihr Vorschlag, 'findstr /?' Zu verwenden, war sehr hilfreich :-) –

3

Es sind keine Platzhalter für Zeichenfolgenvergleiche zulässig.

Sie können es vereinfachen, indem Sie Ihre Zeile substringieren.
Aber zuerst sollten Sie Ihren Code reparieren.
Es muss set line=%%i nicht line=%%i sein.

@echo off 
setlocal enableextensions enabledelayedexpansion 

for /f "delims=" %%i in (myFile.txt) do (
    set "line=%%i" 
    set "first=!line:~0,3!" 
    if "!first!" EQU "foo" (
     echo(!line! 
    ) 
) 
+0

Vielen Dank . Warum startet Ihre For-Schleife mit 'for/f" delims = "...'? –

+2

, weil Standard-Delimter SPACE und TAB sind. Ohne die Delims zu deaktivieren, erhalten Sie nur das erste Wort. – Stephan