novaly
Goto Top

INI Datei via Batch auslesen, verändern und nur einen Teil übernehmen in neue Datei

Hallo Brauch mal Hilfe , hab schon einiges hier gefunden aber nichts klappt wie ich es genau möchte.

folgendes:

Ich habe eine ini Datei die ich Auslesen möchte und einen Wert verändern mag aber nur einen Teil in die Neu "ini" übernehmen möchte.

So sieht sie aus:
[0D:71:DA:7D:1A:00]
name=pc1-DE
sec_mode=2
pin_code=
discovery_mode=13
dev_class=0x00120104

[0A:71:DA:7D:1A:00]
discovery_mode=13
sec_mode=2
dev_class=0x00120104
name=pcharald-DE

[05:71:DA:7D:1A:00]
discovery_mode=13
sec_mode=2
dev_class=0x00120104
name=01_Test

Nun möchte ich nur das hier übernehmen:
[05:71:DA:7D:1A:00]
discovery_mode=13
sec_mode=2
dev_class=0x00120104
name=05_Test


Und denn Namen von "name=05_Test" zb in "name=02_Test" ändern.

Für zweites hatte ich schon ein CMD Scrip das Super läuft:
@echo on & setlocal enabledelayedexpansion

setlocal
echo Bitte vollstaendigen Dateipfad angeben:
set Datei=D:\btl.INI
echo Welchen String ersetzen?
set Von=05_Test
echo Durch welchen String ersetzen?
set Nach=02_Test

set "t=D:\LOCALDEVICE.INI"  

rem Temp-Datei definitiv neu
if exist "%t%" del "%t%"   


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

exit

Nun Fehlt mir noch wie ich die 2 ersten Datensätze:
[0D:71:DA:7D:1A:00]
name=pc1-DE
sec_mode=2
pin_code=
discovery_mode=13
dev_class=0x00120104

[0A:71:DA:7D:1A:00]
discovery_mode=13
sec_mode=2
dev_class=0x00120104
name=pcharald-DE

nicht mit Übernehme sondern nur den Letzen:

Nun möchte ich nur das hier übernehmen:
[05:71:DA:7D:1A:00]
discovery_mode=13
sec_mode=2
dev_class=0x00120104
name=02_Test


Am besten wäre eins das nach letzen Eintrag in [ ] sucht und ab da kopiert. das ist immer der Aktuellst.

Beim Inhalt von [ ] handelt es sich um die Mac Adresse des Bluetooth Dongle.


Vielen Dank euch allen im Voraus.
Kommentar vom Moderator Dani am 23.04.2016 um 19:22:50 Uhr
Formatierungen hinzugefügt...

Content-Key: 302676

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

Ausgedruckt am: 19.03.2024 um 05:03 Uhr

Mitglied: rubberman
rubberman 23.04.2016 um 19:28:01 Uhr
Goto Top
Hallo Novaly,

so etwa könnte das aussehen:
@echo off &setlocal
set "infile=test.ini"  
set "outfile=test2.ini"  
set "searchname=name"  
set "newvalue=02_Test"  

for /f "delims=:" %%i in ('type "%infile%"^|findstr /nrc:"\[..*\]"') do set /a "lastsection=%%i"  

setlocal EnableDelayedExpansion
<"!infile!" >"!outfile!" (  
  for /f %%i in ('type "!infile!"^|find /c /v ""') do (  
    for /l %%j in (2 1 !lastsection!) do set /p "="  
    for /l %%j in (!lastsection! 1 %%i) do (
      set "line=" &set /p "line="  
      for /f "tokens=1* delims==" %%k in ("!line!") do if /i "%%k"=="!searchname!" (  
        echo(%%k=!newvalue!
      ) else (
        echo(!line!
      )
    )
  )
)
Grüße
rubberman
Mitglied: Novaly
Novaly 23.04.2016 um 20:02:41 Uhr
Goto Top
Perfekt läuft...
Dankeschön.