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

Batch - Eintrag in einer .ini datei verändern

Frage Entwicklung Batch & Shell

Mitglied: 73168

73168 (Level 1)

22.12.2008, aktualisiert 01:50 Uhr, 13126 Aufrufe, 7 Kommentare

Hallo Community,

da ich im Bereich des batchings noch nicht sehr viel Ahnung habe, bitte ich im vorraus um Nachsicht!
Zu meinem Problem:

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

[Person]
Nachricht=Dies ist meine persönliche Nachricht!

nun möchte ich den Parameter verändern:

[Person]
Nachricht=Neue persönliche Nachricht. Sie wurde verändert.

wie kann ich dieses tun, ohne ein zusatzprogramm wie setini zu verwenden?
Der Wert steht direkt unter der Klasse, doch ist im gesamten Dokument nicht bekannt, wo diese Klasse steht.
Genausowenig ist bekannt, was der Parameter des Wertes "Nachricht=" ist.

Kurz: Ein batch Programm, mit dem ich den Text (egal welchen) hinter "Nachricht=" entferne und dafür meinen Text einsetze.

Danke im Vorraus!
Takeo91
Mitglied: laggflor
22.12.2008 um 09:53 Uhr
wie kann ich dieses tun, ohne ein zusatzprogramm wie setini zu verwenden?
Garnicht?
Kann dir 'sed' ans Herz legen - kommt von Unix und kann so gut wie alles ersetzen und noch mehr (per Regular Expressions).
Wenn du's ohne Tools schaffst bitte mitteilen - kann ich mir aber nicht vorstellen.

Sed für Windows hab ich noch nie getestet:
http://gnuwin32.sourceforge.net/packages/sed.htm

Hint:
sed -e 's/Such-Regexp/Ersetzen/g' myfile.ini > myfileNeu.ini

Viel Spass damit.
Bitte warten ..
Mitglied: bastla
22.12.2008 um 11:15 Uhr
@laggflor
Deinem Vorschlag mit "sed" würde ich mich anschließen (hätte ich nicht den Eindruck, Takeo91 möchte/darf keine externen Tools verwenden) ...

Garnicht?
Vielleicht doch?
01.
@echo off & setlocal 
02.
set "ini=D:\Deine.ini" 
03.
set "bak=%ini%.bak" 
04.
set "Suche=[Person]" 
05.
set "Neu=Nachricht=Neue persönliche Nachricht. Sie wurde verändert." 
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% (echo\%%j) else (echo %Neu%) 
16.
)>>"%ini%"
Falls die erstellte ".bak"-Datei nicht benötigt wird, einfach noch die Zeile
del "%bak%"
hinzufügen.

Grüße
bastla
Bitte warten ..
Mitglied: laggflor
22.12.2008 um 11:40 Uhr
OK, das wären Windows-Bordmittel. Wobei die

C:\Windows\system32\findstr.exe

nicht wirklich Batch-eigen ist.

Apropos keine externen Tools erlaubt: Wie siehts mit PowerShell aus? Die Wäre offiziell von M$ supported. Alternativ könnte man auch noch VB-Script zu rate ziehen (ist IMHO bei XP mit dabei).

*ironie ein*
Falls externe Tools erlaubt sind tendiere ich zu OO-Programmierung in Python - damit erschlagen wir dann jede Netzwerk-Bandbreite wenn wir zuerst die komplette Python-Runtime installieren um einen String zu ändern. *gg*
Insgesamt wäre natürlich ein installiertes Python auf dem Client schon wieder von Vorteil.
*ironie aus*

Takeo91, choose your weapons
Bitte warten ..
Mitglied: 73168
22.12.2008 um 15:12 Uhr
Ein sehr Herzliches dankeschön an alle!
Habe mich für den quelltext von bastla entschieden

Gruß, Takeo
Bitte warten ..
Mitglied: bastla
22.12.2008 um 15:56 Uhr
@laggflor
Wobei die

C:\Windows\system32\findstr.exe

nicht wirklich Batch-eigen ist.
Falls Du meinst, es handle sich dabei um keinen internen CMD-Befehl, hast Du natürlich recht - mit der Bezeichnung als "Bordmittel" allerdings auch.

Grüße
bastla
Bitte warten ..
Mitglied: burningstep
02.11.2014 um 16:56 Uhr
Hallihallo

Aktuell beschäftige ich mich mit dem gleichen Thema, wie ini-Dateien automatisch ändern zu lassen. Das Script von bastla funktioniert tiptop. Jedoch ist da diese Schleife, welche ich nicht ganz verstehe:

01.
for /f "tokens=1-2 delims=:" %%i in ('findstr /n "^" "%bak%"') do ( 
02.
    if %%i neq %Zeile% (echo\%%j) else (echo %Neu%) 
03.
)>>"%ini%"
Würde mir bitte jemand erklären, was:
- das Dächlein in der ersten Zeile macht?: "^"
- der Backslash in der zweiten Zeile zwischen echo und %%j macht?: echo\%%j


Vielen lieben Dank bereits im Voraus
burningstep
Bitte warten ..
Mitglied: rubberman
02.11.2014 um 17:14 Uhr
Hallo burningstep,

es wäre besser gewesen einen neuen Thread aufzumachen. Du hast Glück, dass ich zufällig gesehen habe, dass jemand nach Jahren noch eine Frage in einem so alten Thread stellt ...

- das Dächlein in der ersten Zeile macht?: "^"
Das Caret gehört zu den von FINDSTR unterstützten Regulären Ausdrücken (wie du der Hilfe findstr /? hättest entnehmen können) und matcht einen Zeilenanfang. Zusammen mit der Option /n lassen sich so auch Leerzeilen einer Datei verarbeiten.

- der Backslash in der zweiten Zeile zwischen echo und %%j macht?: echo\%%j
Der Backslash ist eines der möglichen Zeichen, um die Ausgabe "ECHO ist ein/ausgeschaltet" zu unterdrücken. Da auch Leerzeilen verarbeitet werden, kann %%j durchaus einen leeren String enthalten.

Grüße
rubberman
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

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

Frage von Juergen42 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell oder Batch-Task: Kopiere Datei x mal und benenne diese um (2)

Frage von Lorderich zum Thema Batch & Shell ...

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

Frage von geocast zum Thema Windows Server ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...