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

Geschrieben

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

Geschrieben
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 ;)

Geschrieben
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?

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

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...