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
GELÖST

Einen Wert unter einer Klasse in einer Ini-datei per Batch ändern

Frage Entwicklung Batch & Shell

Mitglied: papajo

papajo (Level 1) - Jetzt verbinden

27.03.2009, aktualisiert 11:18 Uhr, 5991 Aufrufe, 10 Kommentare

Hallo Community,

ich bin im Batch schreiben ein Anfänger und hab ein kleines Problem.
Probiere schon seit ein paar Tagen aber so richtig wills nicht funktionieren.


Habe es schon mit dem Vorschlag von bastla in der Frage: 104583
probiert .

Hatte das Batch schon so weit das es mir ne zusätzliche Zeile eingefügt hat.
Jetzt bricht es mir aber nach dem umbenennen in bak ab.
Kann mir dabei bitte jemand helfen??
Danke schon im Voraus!!
Grüßle Joe

Zu meinem Problem:

Ich habe eine .ini Datei mit der Klasse, Wert und dem Parameter :

[HP5P,WENGERMP]
Muster10A=-968,-292

nun möchte ich den Parameter in ändern:

[HP5P,WENGERMP]
Muster10A=-1028,-292

Die Quell Datei sollte erhalten bleiben.

Mein Versuch:

@echo off & setlocal
set "ini=C:\Dokumente und Einstellungen\user\Desktop\blank08.ini"
set "bak=%ini%.bak"
set "Suche=[HP5P,WENGERMP]"
set "Neu=Muster10A=-1028,-292"

move "%ini%" "%bak%"

set Zeile=
for /f "tokens=1-2 delims=:" %%i in ('findstr /b /n /c:"%Suche%" "%bak%"') do set Zeile=%%i
if not defined Zeile echo "%Suche%" nicht gefunden! & pause & goto :eof


set /a Zeile+=1
for /f "tokens=1-2 delims=:" %%i in ('findstr /n "^" "%bak%"') do (if %%i neq %Zeile% (echo\%%j) else (echo %Neu%) )>>%%i "%ini%"
Mitglied: bastla
29.03.2009 um 15:24 Uhr
Hallo papajo und willkommen im Forum!

Eigentlich wäre nur eine Kleinigkeit an der letzten Zeile zu ändern - die sollte eher so aussehen:
for /f "tokens=1-2 delims=:" %%i in ('findstr /n "^" "%bak%"') do (if %%i neq %Zeile% (echo\%%j) else (echo %Neu%))>>"%ini%"
Grüße
bastla
Bitte warten ..
Mitglied: papajo
29.03.2009 um 20:41 Uhr
Hey Bastla,

danke für die schnelle Antwort.

Ja funktioniert.
Nur fügt das batch nun eine zusätzliche zeile ein und lässt die alte Zeile stehen, anstatt die betreffende zu überschreiben.

Kann man da irgend was machen?

Grüße
papajo
Bitte warten ..
Mitglied: bastla
29.03.2009 um 21:32 Uhr
Hallo papajo!
Nur fügt das batch nun eine zusätzliche zeile ein und lässt die alte Zeile stehen, anstatt die betreffende zu überschreiben.
Das sollte eigentlich nur geschehen, wenn die zu ersetzende Zeile nicht unmittelbar auf die Zeile mit dem Suchbegriff (hier also "[HP5P,WENGERMP]") folgt (da nicht auf den Inhalt der Zeile, sondern auf die Position geprüft wird) - ist das der Fall?

Wenn ja und der Abstand konstant ist (also zB dritte Zeile nach "[HP5P,WENGERMP]"), müsstest Du nur die Zahl in der vorletzten Batchzeile anpassen (ím Beispiel daher 3 anstatt 1).
Falls die zu ersetzende Zeile eindeutig ist, kannst Du aber alternativ die folgende Variante versuchen:
01.
@echo off & setlocal 
02.
set "ini=C:\Dokumente und Einstellungen\user\Desktop\blank08.ini"  
03.
set "bak=%ini%.bak" 
04.
set "Suche=Muster10A=" 
05.
set "Neu=Muster10A=-1028,-292" 
06.
 
07.
move "%ini%" "%bak%" 
08.
for /f "tokens=1-2 delims=:" %%i in ('findstr /n "^" "%bak%"') do (echo %%j|findstr /b /c:"%Suche%">nul &&(echo %Neu%)||(echo\%%j))>>"%ini%"
Hier wird jede Zeile, die mit dem Suchbegriff (also "Muster10A=") beginnt, durch die neue Zeile ersetzt. Falls Groß-/Kleinschreibung nicht übereinstimmen muss (also etwa auch "Muster10a" gefunden werden soll), kann vor dem "/b" des letzten "findstr" noch ein "/i" eingefügt werden.

Grüße
bastla
Bitte warten ..
Mitglied: papajo
29.03.2009 um 23:58 Uhr
Hey Bastla,

Das sollte eigentlich nur geschehen, wenn die zu ersetzende Zeile
nicht unmittelbar auf die Zeile mit dem Suchbegriff (hier also
"[HP5P,WENGERMP]") folgt (da nicht auf den Inhalt der Zeile,
sondern auf die Position geprüft wird) - ist das der Fall?

Wenn ja und der Abstand konstant ist (also zB dritte Zeile nach
"[HP5P,WENGERMP]"), müsstest Du nur die Zahl in der
vorletzten Batchzeile anpassen (ím Beispiel daher 3 anstatt
1).

Ja war so, ich habs jetzt mal so probiert und es funktioniert auch. )

Beendet jetzt aber mit dem echo Batch abbrechen, OK.

Das meint doch das die batch abgebrochen wurde und nicht normal beendet, oder nicht??

Die ini wird aber richtig geändert und geschrieben.


01.
@echo                                       Achtung 
02.
@echo                            blank08.ini  
03.
@echo                                      wird geaendert !!  
04.
@echo. 
05.
@echo                         Wirklich aendern ?? 
06.
@echo . 
07.
@echo                        Wenn NEIN, eine Taste druecken. 
08.
@echo off   
09.
WAIT 5 KEY 
10.
IF ERRORLEVEL 1 goto ex   
11.
IF NOT ERRORLEVEL 1 goto off 
12.
   
13.
:off  
14.
@echo Batch startet jetzt 
15.
@echo off 
16.
setlocal 
17.
set "ini=C:\Dokumente und Einstellungen\user\Desktop\blank08.ini"  
18.
set "bak=%ini%.bak"  
19.
set "Suche=[HP5P,WENGERMP]"  
20.
set "Neu=Muster10A=-1028,-292"  
21.
 
22.
move "%ini%" "%bak%"  
23.
 
24.
set Zeile=  
25.
for /f "tokens=1-2 delims=:" %%i in ('findstr /b /n /c:"%Suche%" "%bak%"') do set Zeile=%%i  
26.
if not defined Zeile echo "%Suche%" nicht gefunden! & pause & goto :eof 
27.
 
28.
set /a Zeile+=18 
29.
for /f "tokens=1-2 delims=:" %%i in ('findstr /n "^" "%bak%"') do (if %%i neq %Zeile%  
30.
 
31.
(echo\%%j) else (echo %Neu%))>>"%ini%" 
32.
 
33.
:ex 
34.
@echo Batch abbrechen, OK 
35.
@echo off 
36.
pause & goto :eof
^[Edit Biber] Codetags gesetzt. [Edit]
Bitte warten ..
Mitglied: bastla
30.03.2009 um 07:39 Uhr
Hallo papajo!
Beendet jetzt aber mit dem echo Batch abbrechen, OK.

Das meint doch das die batch abgebrochen wurde und nicht normal beendet, oder nicht??
Die Meldung am Ende stammt von Deinen zusätzlichen Zeilen - wenn Du vor der Zeile
:ex
noch eine Zeile
goto :eof
einfügst hat sich das auch erledigt.

Grüße
bastla
Bitte warten ..
Mitglied: papajo
30.03.2009 um 18:11 Uhr
Hallo Bastla,

super jetzt funktionierts.

Nochmals vielen Dank für Deine schnelle Hilfe.

Denke
Problem gelöst!
Bitte warten ..
Mitglied: focion00
16.04.2010 um 17:10 Uhr
Hallo,

ich bin neu hier und da meine Aufgabenstellung eigentlich der oben genannten entspricht, häng ich mich mal hier noch dran, obwohl bereits als gelöst markiert. Ich hoffe das geht in Ordnung.

Der Abschnitt sieht folgendermassen aus und das g (könnte auch ein anderer Buchstabe sein) soll entfernt werden.

0:Mode5=1024x768x32x70:1 
0:Mode6=1024x768x32x75:1 
[LANGUAGE] 
Country=g
Das Ergebnis sieht dann leider so aus:
[LANGUAGE] 
Country=g
Es wird also zuviel gelöscht. Als absoluter Anfänger habe ich trotz langer Suche keinen Fehler finden können und hoffe, dass mir hier vielleicht jemand auf die Sprünge helfen kann. Mein Versuch:

01.
@echo off & setlocal 
02.
set "ini=ig2.ini" 
03.
set "bak=%ini%.bak" 
04.
set "Suche=[LANGUAGE]" 
05.
set "Neu=Country=" 
06.
 
07.
move "%ini%" "%bak%" 
08.
 
09.
set Zeile= 
10.
for /f "tokens=1-2 delims=:" %%i in ('findstr /b /n /c:"%Suche%" "%bak%"') do set Zeile=%%i 
11.
if not defined Zeile echo "%Suche%" nicht gefunden! & pause & goto :eof 
12.
 
13.
set /a Zeile+=1 
14.
for /f "tokens=1-2 delims=:" %%i in ('findstr /n "^" "%bak%"') do (if %%i neq %Zeile% (echo\%%j) else (echo %Neu%))>>"%ini%"
Meine Vermutung ist ja, dass der Fehler mit dem delims=: zusammanhängt, komme der Lösung aber einfach nicht näher.

Wäre für jede Hilfestellung dankbar.

Grüße
focion

[Edit Biber] die von bastla angeregten Code-Tags nachgetragen. [/Edit]
Bitte warten ..
Mitglied: bastla
16.04.2010 um 17:24 Uhr
Hallo focion00 und willkommen im Forum!

Deine Vermutung ist richtig - eine angepasste (wenngleich weitgehend ungetestete) Version könnte so aussehen:
01.
@echo off & setlocal 
02.
set "ini=ig2.ini" 
03.
set "bak=%ini%.bak" 
04.
set "Suche=[LANGUAGE]" 
05.
set "Neu=Country=" 
06.
 
07.
move "%ini%" "%bak%" 
08.
 
09.
set Zeile= 
10.
for /f "tokens=1-2 delims=:" %%i in ('findstr /b /n /c:"%Suche%" "%bak%"') do set Zeile=%%i 
11.
if not defined Zeile echo "%Suche%" nicht gefunden! & pause & goto :eof 
12.
 
13.
set /a Zeile+=1 
14.
for /f "tokens=1-2* delims=:" %%i in ('findstr /n "^" "%bak%"') do ( 
15.
    if %%i neq %Zeile% ( 
16.
        if "%%k" neq "" ( 
17.
            echo %%j:%%k 
18.
        ) else ( 
19.
            echo\%%j 
20.
21.
    ) else ( 
22.
        echo %Neu% 
23.
24.
)>>"%ini%"
Grüße
bastla

P.S.: Beim Posten von Batches etc bitte "Code"-Formatierung verwenden ...
Bitte warten ..
Mitglied: focion00
16.04.2010 um 17:52 Uhr
Vielen Dank, bastla!

Hätte nicht gedacht mit derartiger Blitzgeschwindigkeit eine Lösung serviert zu bekommen. Verstanden hab ichs zwar noch nicht werd mir das aber sicher noch genauer anschauen.


Merci + ein schönes Wochenende,
focion00


Zitat von bastla:

P.S.: Beim Posten von Batches etc bitte "Code"-Formatierung verwenden ...

Ist registriert.
Bitte warten ..
Mitglied: bastla
16.04.2010 um 18:50 Uhr
Hallo focion00!
Verstanden hab ichs zwar noch nicht
... das sollte sich doch noch ändern lassen (bei Fragen einfach fragen ) ...

Schönes Wochenende
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Dateinamen mit Batch-Datei ändern - Problem (9)

Frage von fffffuuuuuuuhhhh zum Thema Batch & Shell ...

Batch & Shell
gelöst Teile eines Dateinamens ändern mit Batch Datei (4)

Frage von fffffuuuuuuuhhhh zum Thema Batch & Shell ...

Batch & Shell
gelöst Registry per Batch abfragen und INI Einträge hinzufügen bzw. ändern (18)

Frage von kampen zum Thema Batch & Shell ...

Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(29)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Internet
gelöst Mitarbeiter surft auf unerwünschter Seite - Wie damit umgehen? (55)

Frage von sabines zum Thema Internet ...

Netzwerke
LAN2LAN Verbindung sehr langsam flaschenhals gesucht (27)

Frage von PixL86 zum Thema Netzwerke ...

LAN, WAN, Wireless
Rogue Access Point (20)

Frage von Axel90 zum Thema LAN, WAN, Wireless ...

E-Mail
Fake E-Mail in Outlook für Demonstartionszwecke (12)

Frage von sascha382 zum Thema E-Mail ...