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, 5978 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

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

Frage von Juergen42 zum Thema Batch & Shell ...

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

Frage von geocast zum Thema Windows Server ...

Batch & Shell
gelöst Datum per batch ändern in Tagen (2)

Frage von crawnby 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 ...