pi0h.kk
Goto Top

Batch Zeile suchen und ersetzen Variabler Pfad

Hallo,

ich stehe leider vor einem kleinen Problem was ich nicht in den Griff bekommen.

Ich möchte in mehreren Dateien, die in einem Ordner liegen (*.cfg) eine Zeile Ändern.
Das bekomme ich auch soweit hin, jedoch nur statisch und nicht variabel, wie ich es gerne nutzen würde.

set "Datei=D:\1\2\test.cfg"   
set "Von=N:\asd"   
set "Nach=D:\asd"   
set "t=%temp%\text.tmp"   

if exist "%t%" del "%t%"   
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set Line=!Line:%Von%=%Nach%! & echo !Line!>>"%t%"   
move /y "%t%" "%Datei%  

pause


set "Datei=D:\HICAD\profiles\h5x.cfg"   

Diesen Teil hätte ich gerne Variable, allerdings klappt es so wie ich es versucht habe nicht - stehe auf dem Schlauch face-confused
Evtl. stelle ich mich auch einfach zu dämlich an.

Wäre dankbar für Tips.


(Im Prinzip soll nur der Pfad von "N:\asd\" zu "D:\asd\" in den cfg Dateien geändert werden)

Gruß Jonas

Content-Key: 358213

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

Printed on: April 20, 2024 at 03:04 o'clock

Member: rubberman
Solution rubberman Dec 14, 2017 at 17:49:06 (UTC)
Goto Top
Vermutlich so (ungetestet)
@echo off &setlocal DisableDelayedExpansion

set "Folder=D:\HICAD\profiles"  
set "Von=N:\asd"  
set "Nach=D:\asd"  
set "t=%temp%\text.tmp"  

for %%h in ("%folder%\*.cfg") do (  
  >"%t%" (  
    for /f "usebackq delims=" %%i in ("%folder%\%%~h") do (  
      set "Line=%%i"  
      setlocal EnableDelayedExpansion
      echo !Line:%Von%=%Nach%!
      endlocal
    )
  )
  move /y "%t%" "%folder%\%%~h"  
)
Steffen
Member: pi0h.kk
pi0h.kk Dec 15, 2017 at 10:22:12 (UTC)
Goto Top
Hallo Steffan,

sieht schonmal gut aus,

aber bei dem move Befehl gibt es wohl irgendein Probem mit der Syntax, sodass der Pfad nicht richtig angegeben wird.
Die Datei "D:\HICAD\profiles\D:\HICAD\profiles\h6x.cfg" kann nicht gefunden werden.  

Ist ne Kleinigkeit, aber irgendwie finde ich den Fehler nicht face-confused
Member: rubberman
Solution rubberman Dec 15, 2017 at 11:36:29 (UTC)
Goto Top
Offensichtlich beinhaltet %%h bereits den kompletten Pfad.
@echo off &setlocal DisableDelayedExpansion

set "Folder=D:\HICAD\profiles"  
set "Von=N:\asd"  
set "Nach=D:\asd"  
set "t=%temp%\text.tmp"  

for %%h in ("%folder%\*.cfg") do (  
  >"%t%" (  
    for /f "usebackq delims=" %%i in ("%%~h") do (  
      set "Line=%%i"  
      setlocal EnableDelayedExpansion
      echo !Line:%Von%=%Nach%!
      endlocal
    )
  )
  move /y "%t%" "%%~h"  
)
Steffen
Member: pi0h.kk
pi0h.kk Dec 15, 2017 at 11:58:14 (UTC)
Goto Top
Danke, so klappt es.
Hatt das %folder% nur an der unteren Stelle ausgeklammert.

Close
Member: pi0h.kk
pi0h.kk Dec 21, 2017 updated at 10:44:14 (UTC)
Goto Top
Hallo,

ich muss das Thema leider nochmal aufgreifen.
Generell funktioniert die Batch für meine Anforderungen einwandfrei.

Ich habe nun noch einen 2. Fall, wo ich innerhalb einer TXT einen Wert auslesen möchte und ihn dann ersetze.
Hier gibt es jedoch Probleme, die wohl mit Sonderzeichen zusammen hängen.

Der Code ist der von oben.

Zu suchender Wert
app.gf.data.profile=default;as1

Ersetzender Wert
app.gf.data.profile=default;asdf;asdf

Vorher - Nachher
Vorher
app.gf.data.profile=default

nachher
default;as1=app.gf.data.profile=defaul;asdf;asdf=default;as1

Vermutlich werde ich die "Suche" mit einem Zeichen genuer definieren können, sodass die Problematik mit den Sonderzeichen außen vor bleibt?

Gruß
Member: rubberman
Solution rubberman Dec 21, 2017 at 21:10:44 (UTC)
Goto Top
Ich denke eher du musst dein Konzept überdenken. Ich vermute eine Suche nach dem Schlüsselwort "app.gf.data.profile" ist das, was du eigentlich willst und dort den dazugehörigen Wert (was auch immer dort steht) durch "default;asdf;asdf" ersetzen.

Wieder ungetestet:
set "Folder=D:\HICAD\profiles"  
set "key=app.gf.data.profile"  
set "newval=default;asdf;asdf"  
set "t=%temp%\text.tmp"  

for %%h in ("%folder%\*.cfg") do (  
  >"%t%" (  
    for /f "usebackq tokens=1* delims==" %%i in ("%%~h") do (  
      set "begin=%%i"  
      set "oldval=%%j"  
      setlocal EnableDelayedExpansion
      if defined oldval (
        if "!begin!"=="!key!" (  
          echo(!begin!=!newval!
        ) else (
          echo(!begin!=!oldval!
        )
      ) else echo(!begin!
      endlocal
    )
  )
  move /y "%t%" "%%~h"  
)
Steffen