Top-Themen

Aktuelle Themen (A bis Z)

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 Bestimmten Textblock in wini.ini anhand von Textdatei finden und löschen

Mitglied: cbli

cbli (Level 1) - Jetzt verbinden

06.12.2006, aktualisiert 07.12.2006, 6206 Aufrufe, 7 Kommentare

Problem

Ich möchte die Datei win.ini auf einen bestimmten Eintrag prüfen und bei vorhandsein den gesamten vorhandenen Abschnitt aus einer bestehenden Textdatei auslesen und diesen dann aus der win.ini löschen lassen.
Danach wird ein neuer Abschnitt in die win.ini eingefügt (Diese batch funktioniert bereits).
Es sollen dabei auch keine Leerzeilen oder ähnliches durch das löschen und einfügen entstehen.

Beispiel:


win.ini prüfen -> enthält zeichenfolge "[WinPC]" nicht = normale verarbeitung

win.ini prüfen -> enthält zeichenfolge "[WinPC]" =

dann soll ein bestimmter Abschnitt aus der win.ini gelöscht werden.
z.B
[WinPC]
PATH=C:\WINPC
US1=428DAFC5C61D
US2=428DAFC5C61D
KEYBOARD=GE102AT.CLV
FONT=WINPCF.FON
DEVICE=Generic / Text Only,EPSON24,LPT1:
TOPS=150
BLINK=01
USE1A=0
USE0C=0
USE0A=0
USETIMER=0

Dieser Abschnitt ist als Textdatei vorhanden,z.b mit dem Namen löschen.txt.
Es soll also dann die löscht.txt benutzt werden um diesen Abschnitt aus der win.ini zu entfernen.
Danach soll mit der normalen Verarbeitung weitergemacht werden wo wieder etwas der wini.ini hinzugefügt wird.

Leerzeilen und diese Zeichen -> "  "

sollen durch das einfügen und löschen nicht erzeugt werden

Danke nochmals für die Hilfe

Gruß
Claus
Mitglied: bastla
06.12.2006 um 17:14 Uhr
Hallo Claus!

Verstehe ich das so richtig:
Der Inhalt der "löschen.txt" muss als Block mit genau gleicher Schreibweise in der "win.ini" stehen und soll dann daraus entfernt werden?

Woher stammt das Kennzeichen für eine Verarbeitung (zB "[WinPC]")? Ist dies immer die erste Zeile des entsprechenden Abschnittes (und damit der "löschen.txt")?

Grüße
bastla
Bitte warten ..
Mitglied: cbli
06.12.2006 um 17:30 Uhr
Hallo Claus!

Verstehe ich das so richtig:
Der Inhalt der "löschen.txt"
muss als Block mit genau gleicher
Schreibweise
in der "win.ini"
stehen und soll dann daraus entfernt werden?


ganz genau, der Inhalt von löschen.txt entspricht zeichengetreu dem aktuellen Abschnitt in der win.ini
Diese wird in der Regel nicht geändert und wenn dann nur von mir



Woher stammt das Kennzeichen für eine
Verarbeitung (zB "[WinPC]")? Ist
dies immer die erste Zeile des entsprechenden
Abschnittes (und damit der
"löschen.txt")?

"[WinPC]" entspricht immer der ersten Zeile in der Datei löschen.txt
Danach folgen entsprechende Einstellungen mit denen das Programm arbeitet.
Diese sind auf allen Clients gleich oder werden von mir noch angeglichen (moment da könnte man doch eine Batch....ne ne mach ich von Hand)


Danke für deine Eselsgeduld mit mir

Gruß
Claus
Bitte warten ..
Mitglied: maneich
06.12.2006 um 18:22 Uhr
Hallo,

jeder Abschnit der Win.ini beginnt ja mit der Überschrift in eckigen Klammern []. Die einzelnen Abschnitte sind aber durch eine Leerzeile getrennt.

Um etwas aus einer Datei zu löschen mußt Du den Inhalt der Datei Zeile für Zeile überprüfen.

In Deinem Beispiel fragst Du 1. nach [WinPC], wenn nicht vorhanden in eine temporäre Datei schreiben, wenn vorhanden die weiteren Zeilen nach 2. der folgenden [*] abfragen und erst ab dieser Zeile wieder in temp. Datei weiterschreiben; danach die temp.Datei in die Win.ini zurück überschreiben.

Da du Dein System nicht genannt hast nur soviel:

bei Win9X-Systemen geht das nicht mit einer Batch sondern z.B. mit VBS
bei Systemen W2000 oder höher kann das mit einer Batch gemacht werden.

MfG maneich
Bitte warten ..
Mitglied: bastla
06.12.2006 um 20:19 Uhr
Hallo Claus!

Als VBScript:
01.
'CleanIni.vbs
02.

03.
Const sIniFile = "C:\Windows\win.ini"
04.
Const sDelFile = "D:\löschen.txt"
05.

06.
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
07.

08.
Set oIniFile = fso.OpenTextFile(sIniFile, 1)
09.
sIniData = oIniFile.Read(fso.GetFile(sIniFile).Size)
10.
oIniFile.Close
11.

12.
Set oDelFile = fso.OpenTextFile(sDelFile, 1)
13.
sDelData = oDelFile.Read(fso.GetFile(sDelFile).Size)
14.
oDelFile.Close
15.

16.
iRemoved = 0
17.
iPos = Instr(sIniData, sDelData)
18.
If iPos Then
19.
	Set oIniFile = fso.OpenTextFile(sIniFile, 2, True)
20.
	oIniFile.Write Left(sIniData, iPos - 1) & Mid(sIniData, iPos + Len(sDelData) + 2)
21.
	oIniFile.Close
22.
	iRemoved = 1
23.
End If
24.
sMsg = "Fertig."
25.
If iRemoved = 1 Then sMsg = sMsg & vbCrLF & vbCrLF & "Block wurde entfernt."
26.
WScript.Echo sMsg
27.
WScript.Quit(iRemoved)
Für Verwendung im Batch kannst Du alle Zeilen mit "sMsg" entfernen (oder die Ausgabe nach "nul" umleiten) und den Errorlevel abfragen (1 bedeutet "Block entfernt", 0 eben nicht). Beispiel:
01.
cscript //nologo CleanIni.vbs > nul || echo Block entfernt.
Grüße
bastla
Bitte warten ..
Mitglied: Biber
06.12.2006 um 21:43 Uhr
Also, ich weiss ja nicht...

Bei allem Respekt vor bastla's handwerklich sauberer Lösung:
Für derartige Strategien hätte M$ keine Ini-Dateien erfinden müssen.
Das (relativ) schöne an INI-Dateien ist doch, dass
- eine [SectionXY] irgendwo in der .INI-Datei stehen kann - egal ob vor oder nach einer [SectionABC]
- ein "Key = Value"-Eintrag innerhalb einer Section beliebig vor oder nach einem anderen Eintrag stehen kann.Nix mit alphabetisch oder chronologisch.
- Sich niemand mit der Uhrmacherlupe drüberbeugen muss, um Klein- und Grossschreibung bei "Keys" oder Leerzeichen vor/nach dem Gleichheitszeichen oder trailing blanks zu beachten.
- und erst recht Leerzeilen innerhalb einer oder zwischen [Sections] vollkommen belanglos sind.

Somit sind doch auch bei allen INI-File-Bearbeitungstools (die ich gesehen habe) die Features
- Check einen [Section]-Eintrag auf Existenz und Create einen [Section]-Eintrag
- Delete eine [Section] mit allen Einträgen
sowie
- Check, Create, Alter und Delete gezielt einen Eintrag in einer bestimmten Section.

Die oben umgesetzte Strategie stösst doch schon bei 2 inhaltlich identischen Sections [WinPC] an ihre Grenzen, wenn
- aus Versehen mal ein Leerzeichen am Ende einer Zeile ist
- zwei Einträge in "vertauschter" Reihenfolge kommen
- der FONT mal "WINPCF.FON" und mal "WinPCF.fon" geschrieben wird...

---> Ich würde diese Mimik überdenken.
Da passt es sogar besser, die komplette Section [Win-PC] zu löschen, wenn denn eine gefunden wird und in jedem Fall neu anzulegen.
Aber dann wiederum braucht auch nicht jeder User eigene Einträge in der Win.ini - dann sollte in der Win.ini bestenfalls ein Verweis auf eine WinPC.ini auf einem Server oder im Applikationsverzeichnis stehen.

Gruß
Biber
Bitte warten ..
Mitglied: bastla
07.12.2006 um 09:56 Uhr
Hallo Claus!

Du hast zwar die näheren Umstände Deiner "Ini-Verwandlungs-Aktion" nicht beschrieben, aber für den "Normalfall" hat Biber ganz sicher recht (auch hinsichtlich der Leerstellen/-zeilen).

Da passt es sogar besser, die komplette Section [Win-PC] zu löschen, wenn denn eine gefunden wird und in jedem Fall neu anzulegen.
Auch dieser Vorgangsweise kann ich nur zustimmen und hätte daher folgende Variante anzubieten: Erstelle eine Datei "Ersetzen.txt" mit dem gewünschten neuen Abschnitt (der Name "[Win-PC]" muss am Anfang der "Ersetzen.txt" stehen) und verwende das folgende Script, um die alte Section zu löschen und die neue Section an das Ende der "win.ini" zu schreiben:
01.
'ReplaceSection.vbs
02.

03.
Const sIniFile = "C:\Windows\win.ini"
04.
Const sRepFile = "D:\Ersetzen.txt"
05.

06.
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
07.

08.
Set oIniFile = fso.OpenTextFile(sIniFile, 1)
09.
sIniData = oIniFile.Read(fso.GetFile(sIniFile).Size)
10.
oIniFile.Close
11.

12.
Set oRepFile = fso.OpenTextFile(sRepFile, 1)
13.
sRepData = oRepFile.Read(fso.GetFile(sRepFile).Size)
14.
oRepFile.Close
15.

16.
iReplaced = 0
17.
sSection = Trim(Left(sRepData, Instr(sRepData, "]")))
18.
If sSection <> "" Then
19.
	iPos1 = Instr(sIniData, sSection)
20.
	If iPos1 Then
21.
		sIniDataNew = Left(sIniData, iPos1 - 1)
22.
		iPos2 = Instr(iPos1 + 1, sIniData, "[")
23.
		If iPos2 Then sIniDataNew = sIniDataNew & Mid(sIniData, iPos2)
24.
		If Right(sIniDataNew, 2) = vbCrLF Then
25.
			sIniDataNew = sIniDataNew & sRepData
26.
		Else
27.
			sIniDataNew = sIniDataNew & vbCrLF & sRepData
28.
		End If
29.

30.
		Set oIniFile = fso.OpenTextFile(sIniFile, 2, True)
31.
		oIniFile.Write sIniDataNew
32.
		oIniFile.Close
33.
		iReplaced = 1
34.
	End If
35.
End If
36.
sMsg = "Fertig."
37.
If iReplaced = 1 Then sMsg = sMsg & vbCrLF & vbCrLF & "Section wurde ersetzt."
38.
WScript.Echo sMsg
39.
WScript.Quit(iReplaced)
Grüße
bastla
Bitte warten ..
Mitglied: cbli
07.12.2006 um 10:58 Uhr
Danke dir Bastla !
Hat genauso funktioniert wie ich es wollte. Perfekt !
Nochmal zu den näheren Umständen:

Hintergrund ist einfach der,daß wir hier im Betrieb gerade unsere Branchenlösung Software gewechselt haben,aber die alte Software zusätzlich noch ein Weilchen laufen muss bis die Übernahme komplett ist.
Die alte Software läuft nur unter einer Terminalemulation. Leider sind die Originaldisketten einem Unfall zum Opfer gefallen und da wir das Programm irgendwann gar nicht mehr brauchen ,war ein Neukauf wirtschaftlich nicht sinnvoll.
Deshalb musste ich eben eine installierte Version so bearbeiten,daß ich sie bei einem neuen User oder Neu Setup eines PC´s einfach kopieren konnte.
Dazu war dann eben die Bearbeitung der win.ini nötig.
Wie schon geschrieben hat jeder User die gleichen Einträge und deshalb reicht es mir nur zu checken ob eventuell die Einträge schon vorhanden sind,damit sie nicht doppelt eingetragen werden. Das Löschen der ganzen Sektion ist auf jeden Fall die beste Lösung.
Sollte sich doch mal noch was ändern ,muss ich eben nur den ersetzen.txt anpassen.


Thread kann also geschlossen werden.
Nochmals Dank

Gruß
Claus
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Word bestimmt Sprache selbst
gelöst Frage von honeybeeMicrosoft Office1 Kommentar

Hallo, habe in Word 2016 ein nerviges Problem: Auf meinem Computer (Windows 10) sind zwei Sprachen installiert: Deutsch und ...

Mac OS X
Safari öffnet bestimmt Seite nicht
Frage von tomi93Mac OS X2 Kommentare

Hallo , ich habe an einem iMac bei uns im Unternehmen das Problem das Safari dort eine bestimmte Seite ...

Backup
Find-Befehl - Es hakt gerade
Frage von it-fraggleBackup1 Kommentar

Vielleicht sollte ich endlich schlafen gehen, aber DAS muss ich noch zuende machen. Wo ist der Fehler? In /media/backups/ ...

Microsoft

Über VPN nur bestimmt große Daten übertragen

gelöst Frage von Peter007Microsoft5 Kommentare

Hallo zusammen, gibt es eine Möglichkeit bei Außendienstmitarbeitern die über VPN angebunden sind, die übertragbare Datenmenge zum Fileserver über ...

Neue Wissensbeiträge
Internet

Kommentar: Bundesregierung erwägt Ausschluss von Huawei im 5G-Netz - Unsere Presse wird immer sensationsgieriger

Information von Frank vor 1 StundeInternet1 Kommentar

Hier mal wieder ein schönes Beispiel für fehlgeleiteten Journalismus und Politik zu gleich. Da werden aus Gerüchten plötzlich Fakten, ...

Windows 10

Netzwerk-Bug in allen Windows 10-Versionen durch Januar 2019-Updates

Information von kgborn vor 5 StundenWindows 101 Kommentar

Nur ein kurzer Hinweis für Admins, die Windows 10-Clients im Portfolio haben. Mit den Updates vom 8. Januar 2019 ...

Windows 10

Windows 10 V1809: Rollout ist gestartet - kommt per Windows Update

Information von kgborn vor 23 StundenWindows 102 Kommentare

Eine kurze Information für die Admins, die Windows 10 im Programm haben. Microsoft hat die letzte Baustelle (die Inkompatibilität ...

Sicherheit

Heise Beitrag Passwort-Sammlung mit 773 Millionen Online-Konten im Netz aufgetaucht

Information von Penny.Cilin vor 1 TagSicherheit6 Kommentare

Auf Heise Online ist folgender Beitrag veröffentlicht worden: Heise Beitrag passwörter geleakt Ich bin mir jetzt nicht ganz sicher, ...

Heiß diskutierte Inhalte
Windows Server
Uhren gehen immer wieder falsch
Frage von killtecWindows Server23 Kommentare

Hallo, ich habe folgende Konstellation: 1. Physischer DC Div. Virtuelle DC's auf Hyper-V Servern Die Hyper-V-Server, der Physische DC ...

Switche und Hubs
Medienkonverter mit 12 oder 24 Ports gesucht
Frage von wmuellerSwitche und Hubs23 Kommentare

Guten Morgen, ich bin auf der Suche nach einem größeren Medienkonverter, der "stumpf" 1:1 die Ports auf über ein ...

Debian
OpenSSH Login mit Public Key schlägt fehl, mit Passwort funktioniert
gelöst Frage von DKowalkeDebian19 Kommentare

Hallo zusammen, ich hatte hier schon nach einer Anleitung für einen SFTP Server mit Linux gefragt, habe dort auch ...

Windows Server
Client in die Domäne einbinden - Allgemeine Frage dazu
gelöst Frage von RalphTWindows Server19 Kommentare

Moin, ich habe 2 DCs in einer Hauptstelle und 2 DCs in einer Nebenstelle. Ich bringe in der Hauptstelle ...