
77575
20.09.2012
Ini Datei Blöcke löschen
Hallo,
ich möchte aus einer ini Datei den Inhalt von Blöcken löschen. Habe eine ähnliche Frage hier im Forum gefunden, jedoch ging es da um vbs. meine Lösung kann nicht mit vbs reallisiert werden. Ich muss dies in ein bestehendes cmd Skript einarbeiten.
Ein kleines Bsp.
[function1]
param0=2435
param1=xyz
param2=ddddd
[color]
colorbackground=black
colorforground=white
...usw.
Ich möchte jetzt das alle Einträge von [function1] gelöscht werden, nicht der Eintrag [function1] selbst, bis zum nächsten Block.
Einzelne Zeilen kann ich löschen dafpr hab ich schon cmd code gefunden nur ändern sie die Anzahl der Parameter immer, also kann ich auch nicht einfach sagen die nächsten 5 zeilen ab [function1] sollen gelöscht werden, es können auch 250 oder mehr sein.
Danke schonmal für die Hilfe und eure Anregungen.
gruss 01
ich möchte aus einer ini Datei den Inhalt von Blöcken löschen. Habe eine ähnliche Frage hier im Forum gefunden, jedoch ging es da um vbs. meine Lösung kann nicht mit vbs reallisiert werden. Ich muss dies in ein bestehendes cmd Skript einarbeiten.
Ein kleines Bsp.
[function1]
param0=2435
param1=xyz
param2=ddddd
[color]
colorbackground=black
colorforground=white
...usw.
Ich möchte jetzt das alle Einträge von [function1] gelöscht werden, nicht der Eintrag [function1] selbst, bis zum nächsten Block.
Einzelne Zeilen kann ich löschen dafpr hab ich schon cmd code gefunden nur ändern sie die Anzahl der Parameter immer, also kann ich auch nicht einfach sagen die nächsten 5 zeilen ab [function1] sollen gelöscht werden, es können auch 250 oder mehr sein.
Danke schonmal für die Hilfe und eure Anregungen.
gruss 01
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 191565
Url: https://administrator.de/forum/ini-datei-bloecke-loeschen-191565.html
Ausgedruckt am: 06.04.2025 um 19:04 Uhr
14 Kommentare
Neuester Kommentar
Hallo 01-01-01!
Das könnte so gehen:
Es werden so alle Zeilen nach dem in Zeile 4 festgelegten Section-Header bis zur nächsten Zeile, die "[" enthält, gelöscht ...
Grüße
bastla
Das könnte so gehen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off & setlocal
set "Ein=D:\Die alte.ini"
set "Aus=D:\Die neue.ini"
set "Ab=[function1]"
set "Schreiben=true"
del "%Aus%" 2>nul
for /f "delims=" %%i in ('findstr /n "^" "%Ein%"') do set "Zeile=%%i" & call :ProcessLine
goto :eof
:ProcessLine
echo "%Zeile%"|findstr "[">nul && set "Schreiben=true"
if /i "%Zeile:*:=%"=="%Ab%" (
set "Schreiben="
) else (
setlocal enabledelayedexpansion
if defined Schreiben >>"%Aus%" echo(!Zeile:*:=!
endlocal
)
goto :eof
Grüße
bastla
Vor Jahren hatte mir EditINI von kostis.net geholfen:
Programm:
http://www.kostis.net/freeware/editini.zip
HTML-Doku:
http://www.kostis.net/freeware/editini.htm
Programm:
http://www.kostis.net/freeware/editini.zip
HTML-Doku:
http://www.kostis.net/freeware/editini.htm
Hallo 01-01-01!
Sorry - kann ich nicht nachvollziehen; beim Test mit Deiner dargestellten (BTW: sollte besser, wie auch Batch-Zeilen, als "Code" formatiert sein) ini-Datei und meinem geposteten Batch erhalte ich als Ergebnis
Grüße
bastla
Sorry - kann ich nicht nachvollziehen; beim Test mit Deiner dargestellten (BTW: sollte besser, wie auch Batch-Zeilen, als "Code" formatiert sein) ini-Datei und meinem geposteten Batch erhalte ich als Ergebnis
1
2
3
2
3
[IRGENDWAS]
1=sddasdd
2=asdfsdff
bastla
Hallo 01-01-01!
Das sähe dann bei mir so aus (Ablauf in der CMD-Shell):
Grüße
bastla
Das sähe dann bei mir so aus (Ablauf in der CMD-Shell):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
D:\>type EntferneBlock.cmd
@echo off & setlocal
set "Ein=D:\tmp\Settings.ini"
set "Aus=D:\tmp\Settings_neu.ini"
set "Ab=[Recent File List]"
set "Schreiben=true"
del "%Aus%" 2>nul
for /f "delims=" %%i in ('findstr /n "^" "%Ein%"') do set "Zeile=%%i" & call :Pr
ocessLine
goto :eof
:ProcessLine
echo "%Zeile%"|findstr "[">nul && set "Schreiben=true"
if /i "%Zeile:*:=%"=="%Ab%" (
set "Schreiben="
) else (
setlocal enabledelayedexpansion
if defined Schreiben >>"%Aus%" echo(!Zeile:*:=!
endlocal
)
goto :eof
D:\>type D:\tmp\Settings.ini
[TBCFG-Advanced-Bar3]
Bar#0=0
Bar#1=34771
Bar#2=0
BarID=59420
Bars=3
[Language 3 Colors]
Colors=0,8421376,8421gasdfgsdfgdg
Colors Auto Back=1,1,6546356,1,
Colors Back=16777215,16777466dggsgf,
Font Style=0,0,0,0,0,0,0,0,0,0,0,0,0,
[Recent File List]
File1=testtest
File10=testtest
File2=testtest
File3=testtest
File4=testtest
File5=testtest
File6=testtest
File7=testtest
File8=testtest
File9=testtest
[ToolBarState1-v140-Bar3]
Bar#0=0
Bar#1=34771
Bar#2=0
BarID=59420
Bars=3
[Replace History]
0="HKEY_LOCAL_MACHINE\_D\"
1="wwwww"
2="wwweer"
3="www"
4="adadad"
[BookMark]
sizeFloatCX=220
sizeFloatCY=220
sizeHorzCX=220
sizeHorzCY=190
sizeVertCX=190
sizeVertCY=342
D:\>EntferneBlock.cmd
D:\>type D:\tmp\Settings_neu.ini
[TBCFG-Advanced-Bar3]
Bar#0=0
Bar#1=34771
Bar#2=0
BarID=59420
Bars=3
[Language 3 Colors]
Colors=0,8421376,8421gasdfgsdfgdg
Colors Auto Back=1,1,6546356,1,
Colors Back=16777215,16777466dggsgf,
Font Style=0,0,0,0,0,0,0,0,0,0,0,0,0,
[ToolBarState1-v140-Bar3]
Bar#0=0
Bar#1=34771
Bar#2=0
BarID=59420
Bars=3
[Replace History]
0="HKEY_LOCAL_MACHINE\_D\"
1="wwwww"
2="wwweer"
3="www"
4="adadad"
[BookMark]
sizeFloatCX=220
sizeFloatCY=220
sizeHorzCX=220
sizeHorzCY=190
sizeVertCX=190
sizeVertCY=342
D:\>
bastla
moin 01,
bei Sonderzeichen nehme ich gerne auch den Vergleich in Delayedexpansion auf:
zB. so
aber das brauch mer hier ja gar net.
[Edit]Nummerierung entfernen eingefügt.[/Edit]
[edit2]Klammer zu gesponsort.[/edit2]
Gruß Phil
bei Sonderzeichen nehme ich gerne auch den Vergleich in Delayedexpansion auf:
zB. so
1
IF !Line:*:^=! equ [XYZ] echo ja ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
setlocal
set "Ein=D:\Die alte.ini"
set "Aus=D:\Die neue.ini"
set "Ab=[function1]"
set "Schreiben=true"
3>"%Aus%" (
for /f "delims=" %%i in ('findstr /n "^" "%Ein%"') do (
for /f "tokens=2delims=" %%j in ("%%i") do if "[%%j]" neq "%AB%" (set "Schreiben=1") else set "Schreiben="
set "Line=%%i"
setlocal enabledelayedexpansion
if defined Schreiben >&3 echo(!line:*:=!
endlocal
) )
[Edit]Nummerierung entfernen eingefügt.[/Edit]
[edit2]Klammer zu gesponsort.[/edit2]
Gruß Phil
Hallo 01-01-01!
Sollte sich mit folgender Änderung machen lassen:
Grüße bastla
P.S.: Wenn Du gleich repräsentative Testdaten verwendet hättest ...
Sollte sich mit folgender Änderung machen lassen:
1
2
3
4
5
6
7
2
3
4
5
6
7
:ProcessLine
echo "%Zeile%"|findstr "[">nul && set "Schreiben=true"
echo "%Zeile%"|findstr /i "%Ab%">nul && set "Schreiben="
setlocal enabledelayedexpansion
if defined Schreiben >>"%Aus%" echo(!Zeile:*:=!
endlocal
goto :eof
P.S.: Wenn Du gleich repräsentative Testdaten verwendet hättest ...
moin,
@bastla Dein findstr sucht aber auch nach einem Ausdruck und somit auch nach einer [Zeichenklasse]
besser wäre da eventuell find oder findstr /c:"bla" :
@77575
kann ich so nicht nachvollziehen, der Code funktioniert: hier
Gruß Phil
@bastla Dein findstr sucht aber auch nach einem Ausdruck und somit auch nach einer [Zeichenklasse]
besser wäre da eventuell find oder findstr /c:"bla" :
1
2
3
4
2
3
4
:ProcessLine
cmd /von /c "echo(!Zeile!"|find "[">nul && set "Schreiben=true"
cmd /von /c "echo(!Zeile!"|find /i "%Ab%">nul && set "Schreiben="
...
kann ich so nicht nachvollziehen, der Code funktioniert: hier
Gruß Phil