Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Ini Datei Blöcke löschen

Frage Entwicklung Batch & Shell

Mitglied: 77575

77575 (Level 1)

20.09.2012 um 19:36 Uhr, 2761 Aufrufe, 14 Kommentare

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
Mitglied: bastla
20.09.2012 um 23:32 Uhr
Hallo 01-01-01!

Das könnte so gehen:
01.
@echo off & setlocal 
02.
set "Ein=D:\Die alte.ini" 
03.
set "Aus=D:\Die neue.ini" 
04.
set "Ab=[function1]" 
05.
set "Schreiben=true" 
06.
 
07.
del "%Aus%" 2>nul 
08.
for /f "delims=" %%i in ('findstr /n "^" "%Ein%"') do set "Zeile=%%i" & call :ProcessLine 
09.
goto :eof 
10.
 
11.
:ProcessLine 
12.
echo "%Zeile%"|findstr "[">nul && set "Schreiben=true" 
13.
if /i "%Zeile:*:=%"=="%Ab%" ( 
14.
    set "Schreiben=" 
15.
) else ( 
16.
    setlocal enabledelayedexpansion 
17.
    if defined Schreiben >>"%Aus%" echo(!Zeile:*:=! 
18.
    endlocal 
19.
20.
goto :eof
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
Bitte warten ..
Mitglied: 0x32f1
21.09.2012 um 08:50 Uhr
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
Bitte warten ..
Mitglied: 77575
21.09.2012 um 10:20 Uhr
Hi Bastla,

danke erstmal für die schnelle Antwort und deine Mühen.

Funktioniert noch nicht ganz.
Das Skript löscht zwar etwas raus aber nicht das was es soll.

Es werden 4 Blöcke am Anfang der Datei stehen gelassen, dann fängt das Skript an alles andere zu löschen.

Hier meine Variablen:

set "Ein=D:\tmp\Settings.ini"
set "Aus=D:\tmp\Settings_neu.ini"
set "Ab=[Recent File List]"
set "Schreiben=true"

Die ini Datei:
[Recent File List]
File1=C:\Users\blah\Documents\irgendwas.txt
File10=D:\tmp\sddsdso.doc
File2=C:\Users\blah\Documents\test.txt
File3=\\server1\freigabe1\test.doc
File4=E:\Dateien\hallo.cmd

[IRGENDWAS]
1=sddasdd
2=asdfsdff

Leider werde ich aus der Syntax nicht schlau, vielleicht weißt du ja warum das so ist.

Gruss 01
Bitte warten ..
Mitglied: bastla
21.09.2012 um 10:36 Uhr
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
01.
[IRGENDWAS] 
02.
1=sddasdd 
03.
2=asdfsdff
Grüße
bastla
Bitte warten ..
Mitglied: 77575
21.09.2012 um 11:57 Uhr
Ich hab das jetzt mehrfach getestet und in den ersten 3 Blöcken auch mal Wert mit # oder _ weggelöscht, weil ich gedacht habe es liegt vielleicht an einem Sonderzeichen.
Aber es löscht immer ab der ersten Zeile des Blocks [Replace History]. Auch wenn ich zum testen den Block in [ReplaceHistory] ändere oder den Wert 0="shsfghsg" in etwas anderes ändere.

Ich kann auch einen oder alle Blöcke am Anfang löschen, so das [Replace History] in der ersten zeile steht. Dann löscht es trotzdem alles nach 0="shsfghsg"

01.
[TBCFG-Advanced-Bar3] 
02.
Bar#0=0 
03.
Bar#1=34771 
04.
Bar#2=0 
05.
BarID=59420 
06.
Bars=3 
07.
 
08.
[Language 3 Colors] 
09.
Colors=0,8421376,842ertwer768,4210816,16711680,16711680,16711680, 
10.
Colors Auto Back=1,1,1,1,1,1,1,1,1,1,1,1,1, 
11.
Colors Back=16777215,16777215,16777wtert15,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215, 
12.
Font Style=0,0,0,0,0,0,0,0,0,0,0,0,0, 
13.
Bar1=3 
14.
 
15.
[ToolBarState1-v140-Bar3] 
16.
Bar0=0 
17.
Bar1=3 
18.
Bar1=3 
19.
Bar1=3 
20.
 
21.
[Replace History] 
22.
0="shsfghsg" 
23.
 

gruss 01
Bitte warten ..
Mitglied: 77575
21.09.2012 um 12:04 Uhr
Hi, ich nochmal.

Wenn du es mit dieser ini Datei versuchst, was kommt dann bei dir raus?

01.
 
02.
[TBCFG-Advanced-Bar3] 
03.
Bar#0=0 
04.
Bar#1=34771 
05.
Bar#2=0 
06.
BarID=59420 
07.
Bars=3 
08.
 
09.
[Language 3 Colors] 
10.
Colors=0,8421376,8421gasdfgsdfgdg 
11.
Colors Auto Back=1,1,6546356,1, 
12.
Colors Back=16777215,16777466dggsgf, 
13.
Font Style=0,0,0,0,0,0,0,0,0,0,0,0,0, 
14.
 
15.
[Recent File List] 
16.
File1=testtest 
17.
File10=testtest 
18.
File2=testtest 
19.
File3=testtest 
20.
File4=testtest 
21.
File5=testtest 
22.
File6=testtest 
23.
File7=testtest 
24.
File8=testtest 
25.
File9=testtest 
26.
 
27.
[ToolBarState1-v140-Bar3] 
28.
Bar#0=0 
29.
Bar#1=34771 
30.
Bar#2=0 
31.
BarID=59420 
32.
Bars=3 
33.
 
34.
[Replace History] 
35.
0="HKEY_LOCAL_MACHINE\_D\" 
36.
1="wwwww" 
37.
2="wwweer" 
38.
3="www" 
39.
4="adadad" 
40.
 
41.
[BookMark] 
42.
sizeFloatCX=220 
43.
sizeFloatCY=220 
44.
sizeHorzCX=220 
45.
sizeHorzCY=190 
46.
sizeVertCX=190 
47.
sizeVertCY=342 
48.
 
Bitte warten ..
Mitglied: bastla
21.09.2012, aktualisiert um 12:15 Uhr
Hallo 01-01-01!

Das sähe dann bei mir so aus (Ablauf in der CMD-Shell):
01.
D:\>type EntferneBlock.cmd 
02.
@echo off & setlocal 
03.
set "Ein=D:\tmp\Settings.ini" 
04.
set "Aus=D:\tmp\Settings_neu.ini" 
05.
set "Ab=[Recent File List]" 
06.
set "Schreiben=true" 
07.
 
08.
del "%Aus%" 2>nul 
09.
for /f "delims=" %%i in ('findstr /n "^" "%Ein%"') do set "Zeile=%%i" & call :Pr 
10.
ocessLine 
11.
goto :eof 
12.
 
13.
:ProcessLine 
14.
echo "%Zeile%"|findstr "[">nul && set "Schreiben=true" 
15.
if /i "%Zeile:*:=%"=="%Ab%" ( 
16.
    set "Schreiben=" 
17.
) else ( 
18.
    setlocal enabledelayedexpansion 
19.
    if defined Schreiben >>"%Aus%" echo(!Zeile:*:=! 
20.
    endlocal 
21.
22.
goto :eof 
23.
D:\>type D:\tmp\Settings.ini 
24.
[TBCFG-Advanced-Bar3] 
25.
Bar#0=0 
26.
Bar#1=34771 
27.
Bar#2=0 
28.
BarID=59420 
29.
Bars=3 
30.
 
31.
[Language 3 Colors] 
32.
Colors=0,8421376,8421gasdfgsdfgdg 
33.
Colors Auto Back=1,1,6546356,1, 
34.
Colors Back=16777215,16777466dggsgf, 
35.
Font Style=0,0,0,0,0,0,0,0,0,0,0,0,0, 
36.
 
37.
[Recent File List] 
38.
File1=testtest 
39.
File10=testtest 
40.
File2=testtest 
41.
File3=testtest 
42.
File4=testtest 
43.
File5=testtest 
44.
File6=testtest 
45.
File7=testtest 
46.
File8=testtest 
47.
File9=testtest 
48.
 
49.
[ToolBarState1-v140-Bar3] 
50.
Bar#0=0 
51.
Bar#1=34771 
52.
Bar#2=0 
53.
BarID=59420 
54.
Bars=3 
55.
 
56.
[Replace History] 
57.
0="HKEY_LOCAL_MACHINE\_D\" 
58.
1="wwwww" 
59.
2="wwweer" 
60.
3="www" 
61.
4="adadad" 
62.
 
63.
[BookMark] 
64.
sizeFloatCX=220 
65.
sizeFloatCY=220 
66.
sizeHorzCX=220 
67.
sizeHorzCY=190 
68.
sizeVertCX=190 
69.
sizeVertCY=342 
70.
 
71.
D:\>EntferneBlock.cmd 
72.
 
73.
D:\>type D:\tmp\Settings_neu.ini 
74.
[TBCFG-Advanced-Bar3] 
75.
Bar#0=0 
76.
Bar#1=34771 
77.
Bar#2=0 
78.
BarID=59420 
79.
Bars=3 
80.
 
81.
[Language 3 Colors] 
82.
Colors=0,8421376,8421gasdfgsdfgdg 
83.
Colors Auto Back=1,1,6546356,1, 
84.
Colors Back=16777215,16777466dggsgf, 
85.
Font Style=0,0,0,0,0,0,0,0,0,0,0,0,0, 
86.
 
87.
[ToolBarState1-v140-Bar3] 
88.
Bar#0=0 
89.
Bar#1=34771 
90.
Bar#2=0 
91.
BarID=59420 
92.
Bars=3 
93.
 
94.
[Replace History] 
95.
0="HKEY_LOCAL_MACHINE\_D\" 
96.
1="wwwww" 
97.
2="wwweer" 
98.
3="www" 
99.
4="adadad" 
100.
 
101.
[BookMark] 
102.
sizeFloatCX=220 
103.
sizeFloatCY=220 
104.
sizeHorzCX=220 
105.
sizeHorzCY=190 
106.
sizeVertCX=190 
107.
sizeVertCY=342 
108.
 
109.
D:\>
Grüße
bastla
Bitte warten ..
Mitglied: 77575
21.09.2012 um 13:18 Uhr
Ja. es wird aber auch der Block "Titel" [Recent File List] mit gelöscht.
Aber das ist nicht schlimm. Das Programm legt es dann wieder an.

Ich denke das kann ich so bei mir einbauen.
Danke dir.

gruss 01
Bitte warten ..
Mitglied: 77575
21.09.2012 um 13:47 Uhr
Hallo, zu früh gefreut.

Wenn ich das jetzt mit der original ini Datei machen, löscht es wieder alles raus ab
01.
[Replace History] 
02.
0="HKEY_LOCAL_MACHINE\_D\"
Ich weiß jetzt aber auch warum


wenn diese Zeilen auftauchen, löscht es alles raus
01.
1="width="130"" 
02.
2="width="125"" 
03.
3="width="120""
Der komplette Block der das Problem macht sieht so aus:
01.
[Replace History] 
02.
0="HKEY_LOCAL_MACHINE\_D\" 
03.
1="width="130"" 
04.
2="width="125"" 
05.
3="width="120""
alles ab 1="width="130"" wird gelöscht.

gruss 01
Bitte warten ..
Mitglied: pieh-ejdsch
21.09.2012, aktualisiert 24.09.2012
moin 01,

bei Sonderzeichen nehme ich gerne auch den Vergleich in Delayedexpansion auf:
zB. so
01.
IF !Line:*:^=! equ [XYZ] echo ja ...
aber das brauch mer hier ja gar net.
01.
@echo off 
02.
setlocal 
03.
set "Ein=D:\Die alte.ini" 
04.
set "Aus=D:\Die neue.ini" 
05.
set "Ab=[function1]" 
06.
set "Schreiben=true" 
07.
 
08.
3>"%Aus%" ( 
09.
  for /f "delims=" %%i in ('findstr /n "^" "%Ein%"') do ( 
10.
    for /f "tokens=2delims=[]" %%j in ("%%i") do if "[%%j]" neq "%AB%" (set "Schreiben=1") else set "Schreiben=" 
11.
    set "Line=%%i" 
12.
    setlocal enabledelayedexpansion 
13.
    if defined Schreiben >&3 echo(!line:*:=! 
14.
    endlocal 
15.
) )
[Edit]Nummerierung entfernen eingefügt.[/Edit]
[edit2]Klammer zu gesponsort.[/edit2]

Gruß Phil
Bitte warten ..
Mitglied: bastla
21.09.2012 um 14:59 Uhr
Hallo 01-01-01!

Sollte sich mit folgender Änderung machen lassen:
01.
:ProcessLine 
02.
echo "%Zeile%"|findstr "[">nul && set "Schreiben=true" 
03.
echo "%Zeile%"|findstr /i "%Ab%">nul && set "Schreiben=" 
04.
setlocal enabledelayedexpansion 
05.
if defined Schreiben >>"%Aus%" echo(!Zeile:*:=! 
06.
endlocal 
07.
goto :eof
Grüße bastla

P.S.: Wenn Du gleich repräsentative Testdaten verwendet hättest ...
Bitte warten ..
Mitglied: 77575
24.09.2012 um 10:39 Uhr
Zitat von bastla:

P.S.: Wenn Du gleich repräsentative Testdaten verwendet hättest ...

sorry, aber ich konnte ja nicht ahnen das das skript an der stelle probleme macht.
die ini datei hat über 1500 zeilen und da genau die repräsentativen Blöcke rauszufiltern ist nicht möglich.

Das skript läuft zwar und löscht den block raus den es soll, aber auch noch andere blöcke und zeilen.
ich denke da jetzt jede Zeile rauszufiltern macht keinen sinn.

Aber danke für eure mühen, das skript kann ich sicher auch mal woanders verwenden.

gruss 01
Bitte warten ..
Mitglied: pieh-ejdsch
24.09.2012 um 12:30 Uhr
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" :
01.
:ProcessLine 
02.
cmd /von /c "echo(!Zeile!"|find "[">nul && set "Schreiben=true" 
03.
cmd /von /c "echo(!Zeile!"|find /i "%Ab%">nul && set "Schreiben=" 
04.
...
@77575
kann ich so nicht nachvollziehen, der Code funktioniert: hier

Gruß Phil
Bitte warten ..
Mitglied: bastla
24.09.2012 um 15:42 Uhr
@PH
Yep - bzw zusätzlich
set "Ab=\[Recent File List\]"
Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
gelöst Terminalserver .ini Datei unter C:Windows (8)

Frage von geocast zum Thema Windows Server ...

Batch & Shell
gelöst Variable aus ini Datei auslesen und weiterverwenden (17)

Frage von n0cturne zum Thema Batch & Shell ...

Batch & Shell
gelöst BATCH ini Datei Datei auslesen (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...