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!

Recommended Posts

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 to post
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 to post
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...