Problem mit FINDSTR und Pfeil-nach-links Zeichen
Hallo allerseits!
Ich habe ein Problem mit folgendem Progrämmchen:
@echo off
SETLOCAL enabledelayedexpansion
FOR /f "delims=" %%i IN (inputfile.txt) DO (
SET textline=%%i
echo !textline! | findstr SearchString
)
ECHO Done^^!
Wenn in der zu durchsuchenden Datei (inputfile.txt) das Zeichen "<" vorkommt, dann erzeugt das folgende Fehlermeldung:
"Das System kann die angegebene Datei nicht finden"
Wir wohl irgendwie als Redirector interpretiert...
Hat jemand eine Lösung für dieses Problem?
Bin sehr dankbar für Anregungen.
Danke+viele Grüsse
Randolph
Ich habe ein Problem mit folgendem Progrämmchen:
@echo off
SETLOCAL enabledelayedexpansion
FOR /f "delims=" %%i IN (inputfile.txt) DO (
SET textline=%%i
echo !textline! | findstr SearchString
)
ECHO Done^^!
Wenn in der zu durchsuchenden Datei (inputfile.txt) das Zeichen "<" vorkommt, dann erzeugt das folgende Fehlermeldung:
"Das System kann die angegebene Datei nicht finden"
Wir wohl irgendwie als Redirector interpretiert...
Hat jemand eine Lösung für dieses Problem?
Bin sehr dankbar für Anregungen.
Danke+viele Grüsse
Randolph
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 217488
Url: https://administrator.de/forum/problem-mit-findstr-und-pfeil-nach-links-zeichen-217488.html
Ausgedruckt am: 10.04.2025 um 07:04 Uhr
8 Kommentare
Neuester Kommentar
Hallo Randolph und willkommen im Forum!
Was hast Du denn genau vor (denn nur zum Ausgeben der passenden Zeilen würdest Du ja einfach
verwenden
)?
Grundsätzlich könntest Du das ansonsten etwa so versuchen:
Grüße
bastla
P.S.: Bitte zum Posten von Code die passende Formatierung einsetzen ...
Was hast Du denn genau vor (denn nur zum Ausgeben der passenden Zeilen würdest Du ja einfach
findstr SearchString inputfile.txt
Grundsätzlich könntest Du das ansonsten etwa so versuchen:
echo !textline! | findstr SearchString >nul && echo !textline!
bastla
P.S.: Bitte zum Posten von Code die passende Formatierung einsetzen ...
Hi,
das Problem ist die Pipe
Mein Vorschlag (case-insensitiv):
Bei dieser Technik der Forschleife werden übrigens alle Leerzeilen eliminiert.
lg.
das Problem ist die Pipe
|
, da bleiben die Sonderzeichen hängen.Mein Vorschlag (case-insensitiv):
@ECHO OFF &SETLOCAL
FOR /f "delims=" %%i IN (inputfile.txt) DO (
SET "textline=%%i"
SETLOCAL ENABLEDELAYEDEXPANSION
if "!textline!" neq "!textline:SearchString=!" echo(!textline!
ENDLOCAL
)
ECHO Done!
lg.
Hallo Randolph!
Zur Unterscheidung, ob eine Zeile bearbeitet werden muss oder unverändert ausgegeben werden kann, lässt sich der oben gezeigte Ansatz verwenden:
- schematisch dann also etwa so:
Falls auch der SearchString selbst ersetzt werden soll, müsste die Zeile 10 so aussehen:
Grüße
bastla
Zur Unterscheidung, ob eine Zeile bearbeitet werden muss oder unverändert ausgegeben werden kann, lässt sich der oben gezeigte Ansatz verwenden:
echo !textline! | findstr SearchString >nul && (
echo !textline! bearbeiten
) || (
echo !textline! unveraendert ausgeben
)
@ECHO off
set "SearchString=DeinString"
set "FixText=DeinZusatz"
set "Ausgabe=DeineDatei.txt"
SETLOCAL enabledelayedexpansion
(FOR /f "delims=" %%i IN (inputfile.txt) DO (
SET "textline=%%i"
echo "!textline!" | findstr "%SearchString%">nul && (
set "Teil2=!textline:*%SearchString%=!"
call set "textline=%%textline:!Teil2!=%FixText%%%"
)
echo !textline!
))>"%Ausgabe%"
ECHO Done^^!
call set "textline=%%textline:%SearchString%!Teil2!=%FixText%%%"
bastla
Hi Randolph,
Deshalb müssen dann die gefährlichen Sonderzeichen
Entweder wie @bastla es gemacht hat ("ZollZeichen") oder ^Carets^.

lg.
Zitat von @Randolph:
Die Frage, warum das "<"-Zeichen Probleme bei FINDSTR bzw. Stringsubstitution macht ist allerdings noch nicht
geklärt.
Weil die Schutzfunktion von Die Frage, warum das "<"-Zeichen Probleme bei FINDSTR bzw. Stringsubstitution macht ist allerdings noch nicht
geklärt.
delayed expansion
sich nicht auf die Pipe erstreckt.Deshalb müssen dann die gefährlichen Sonderzeichen
<>&|
wieder escaped werden.Entweder wie @bastla es gemacht hat ("ZollZeichen") oder ^Carets^.
Wie setzt man denn ein Thema auf gelöst und wer macht das üblicherweise?
Das macht üblicherweise der Threadstarter. Wie steht in der FAQ lg.