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

Frage Entwicklung Batch & Shell

Mitglied: cbli

cbli (Level 1) - Jetzt verbinden

06.12.2006, aktualisiert 07.12.2006, 6140 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
Ubuntu
Vor- und Nachnamen mit einem bestimmten Muster aus einer Textdatei löschen
gelöst Frage von takitanoUbuntu15 Kommentare

Ok. Meine letzte Frage war ein bisschen undeutlich formuliert. Also hier ist ein neuer Versuch. Ich habe drei Text-Dateien: ...

Batch & Shell
In allen Textdateien eines bestimmten Pfades die Zeilen x bis Ende löschen
gelöst Frage von SchlothBatch & Shell2 Kommentare

Hallo zusammen, ich möchte für alle Textdateien, die unter einem bestimmten Pfad (z.B. Z:\Test\) abgelegt sind, nur die ersten ...

Ubuntu
Vor - und Nachnahmen aus einer Textdatei löschen, die in anderen Textdateien vorhanden sind
gelöst Frage von takitanoUbuntu4 Kommentare

Hallo, ich habe folgendes Problem: ich habe eine Textdatei mit mehr als 30.000.000.000 Zeilen. In eingigen von diesen Zeilen ...

Batch & Shell
Einen bestimmten Teil einer Textdatei auslesen
gelöst Frage von Focus1610Batch & Shell5 Kommentare

Hallo, ich brauche mal einen Denkanstoß. Ich bekomme per FTP von einem Kunden täglich mehrere Textdateien. Diese haben unterschiudlich ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 StundenWindows 10

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 4 StundenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 18 StundenInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 21 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Windows Server
Anmeldung direkt am DC nicht möglich
Frage von ThomasGrWindows Server16 Kommentare

Hallo, ich habe bei unserem Server 2016 Standard ein Problem. Keine Ahnung wie das auf einmal passiert ist. Ich ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte14 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...