Jump to content

Batch-Programmierung REPLACE in FILE


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar
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?

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...