AudioGuy 10 Geschrieben 1. Februar 2007 Melden Teilen Geschrieben 1. Februar 2007 hi, ich würde gerne eine datei zeilenweise einlesen und einige strings ersetzen, andere zeilen jedoch so lassen wie sie sind, auch wenn " oder = drin vorkommen. beispiel: ich habe eine datei template.txt: foo bar REPLACE_ME bar baz("blah=bloh")blub qux ich möchte dort REPLACE_ME durch einen filenamen ersetzen, hier ist mein batch-versuch: @echo off FOR /F "delims=" %%i in (template.txt) do call :ReplaceIt "%%i" goto ExitNormal :ReplaceIt set LINE=%~1 set FILENAME=C:\foo\bar.txt set LINE=%LINE:REPLACE_ME=!FILENAME!% echo %LINE% >>final.txt goto :EOF :ExitNormal echo Ready. pause (natürlich mit verzögerter erweiterung /V:ON bzw DelayedExpansion in der registry, damit das !FILENAME! vorher ersetzt wird) so, das funktioniert solange wie in keiner zeile ein = vorkommt also wenn man in der zeile das = löscht funktioniert es wie es soll, nämlich es ersetzt den REPLACE_ME und lässt alle anderen zeilen wie sie sind. wenn aber das = in der zeile steht kommt er irgendwie durcheinander. die hälfte wird nach stdout gedruckt und nur der anfang der zeile geht in die final.txt das selbe passiert auch wenn man das = durch ein space ersetzt ich denke das liegt an den quotes wie kann man dieses problem lösen möglichst ohne den inhalt von template.txt zu verändern? mfg, AudioGuy Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 1. Februar 2007 Melden Teilen Geschrieben 1. Februar 2007 hast du es anstatt mit ":" schonmal mit qgrep.exe aus dem Reskit versucht? cu blub Zitieren Link zu diesem Kommentar
AnagromAtaf 10 Geschrieben 2. Februar 2007 Melden Teilen Geschrieben 2. Februar 2007 Hai, versuchs mal hiermit: type eingabe.txt | sed s/"replace_me"/"c:\\foo\\bar"/ig > ausgabe.txt Das Tool sed gibts auch für Windows. Vergiß nicht die Backslashes zu verdoppeln. Gruß Anagrom Zitieren Link zu diesem Kommentar
AudioGuy 10 Geschrieben 2. Februar 2007 Autor Melden Teilen Geschrieben 2. Februar 2007 hast du es anstatt mit ":" schonmal mit qgrep.exe aus dem Reskit versucht? cu blub jetzt gerade hab ich das reskit installiert, aber mit grep kann man nicht ersetzen, damit könnte ich nur die zeile finden wo REPLACE_ME drin steht ... trotzdem danke ;) Zitieren Link zu diesem Kommentar
AudioGuy 10 Geschrieben 2. Februar 2007 Autor Melden Teilen Geschrieben 2. Februar 2007 Hai,versuchs mal hiermit: type eingabe.txt | sed s/"replace_me"/"c:\\foo\\bar"/ig > ausgabe.txt Das Tool sed gibts auch für Windows. Vergiß nicht die Backslashes zu verdoppeln. Gruß Anagrom ja danke nach einigem googlen hab ich ein funktionierendes sed.exe gefunden Native Win32 ports of some GNU utilities ist wohl leider down bzw wird nicht mehr gepflegt aber es gab noch eine alte version unter Native Win32 ports of some GNU utilities damit geht es jetzt trotzdem wäre es schön wenn das mit batch/win internen befehlen ginge geht das echt nicht? es müsste irgendwie die interpretation der zeichen aus der datei deaktiviert werden wie gesagt das search & replace funktioniert ja hervorragend es dürfen nur keine '=' vokommen, weil die dann wohl interpretiert werden oder? Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.