anmelder
Goto Top

Reguläre Ausdrücke in FINDSTR

Hallo,

mit
FINDSTR /V /R "\<REM\>" "quelle.bat" >"ziel.bat"  
kann ich alle REM Befehle aus einer Batch entfernen.

An einigen Stellen muß der Befehl aber unverändert bleiben, z.B. wird er mit ECHO> in eine andere Datei geschrieben. An dieser Stelle findet sich vor dem REM ein Dachzeichen, also ^REM.
Dafür würde ich eigentlich
FINDSTR /V /R "\<^REM\>" "quelle.bat" >"ziel.bat"  
nehmen, dann wird aber offenbar gar nichts verändert.

Wie lautet der Befehl damit alle Kommentare aus der Datei entfernt werden außer bei denen:
a) eine unbekannte Menge Leerzeichen vor dem Befehl steht
oder
b) die Zeichenfolge ^REM verwendet wird

Grüße

Content-ID: 1111199946

Url: https://administrator.de/contentid/1111199946

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

149062
149062 01.08.2021 aktualisiert um 15:35:29 Uhr
Goto Top
>"ziel.bat" (findstr /vrc:"^[^ ]*REM" "quelle.bat" | findstr /vrc:"^[ ]*\^REM")

Wieso immer noch Batch? Powershell bietet viel bessere Regex Unterstützung....
anmelder
anmelder 01.08.2021 um 16:55:45 Uhr
Goto Top
Das Programm ist zu groß um jetzt noch wegen einer Zeile mit Powershell anzufangen. Wenn das mit Batch lösbar ist möchte ich es mit Batch machen.

Gegeben ist folgende Beispieldatei:

echo nicht löschen
REM löschen
^REM nicht löschen
echo text ^REM nicht löschen
                      REM löschen

Mit deinem Code bekomme ich folgende Ausgabe:
echo nicht löschen
echo text ^REM nicht löschen
                      REM löschen

Richtig wäre aber:
echo nicht löschen

^REM nicht löschen
echo text ^REM nicht löschen
149062
Lösung 149062 01.08.2021 aktualisiert um 17:13:45 Uhr
Goto Top
Ach so war das von dir gemeint, na dann reicht ja
>"ziel.bat" (findstr /vrc:"^[ ]*REM" "quelle.bat")  
Das Programm ist zu groß um jetzt noch wegen einer Zeile mit Powershell anzufangen
Problemlos als Einzeiler in die Batch nutzbar face-wink
powershell -EP Bypass -C "gc 'D:\quelle.bat | ?{$_ -notmatch '^\s*REM'}' | sc 'D:\ziel.bat' -Encoding Default"
anmelder
anmelder 01.08.2021 um 17:17:27 Uhr
Goto Top
Läuft. Danke