transwarp
Goto Top

TXT per batch Auslesen und Zeilen vergleichen sowie wenn nötig ersetzten bzw. löschen

Hallo Community,

Mein Ziel ist es eine .pbk Datei (DFÜ-Verbindungen) auszulesen und wenn nötig die Datei zu verändern.

Der Aufbau der Datei sieht immer volgendermaßen aus!
Jeder neue Verbindungseintrag (in der .pbk)startet mit einen "[" und endet dann erst wieder mit dem neuen Eintrag ebenfalls start mit "[" oder ende der Datei!

Als beispiel jemand hat eine ältere Datei mit einer Verbindung zu AOL, da diese jetzt ungültig ist müsste Sie durch eine von Arcor ersetzt werden! Aber der T-online Eintrag ist richtig und soll so bleiben!

Wie würdet ihr vorgehen, habe einfach zu wenig erfahrung mit batch dateien!

Vielen Dank für eure Hilfe

Gruß

Content-ID: 53286

Url: https://administrator.de/forum/txt-per-batch-auslesen-und-zeilen-vergleichen-sowie-wenn-noetig-ersetzten-bzw-loeschen-53286.html

Ausgedruckt am: 23.12.2024 um 17:12 Uhr

bastla
bastla 06.03.2007 um 22:55:55 Uhr
Goto Top
Hallo transwarp!

Für das Hinzufügen der neuen Verbindungsdaten könntest Du zunächst einmal die neuen Daten in eine "Neu.txt" schreiben und einfach an die "Aktuell.pbk" anfügen - in Batch etwa so:
if exist Alt.pbk del Alt.pbk
ren Aktuell.pbk Alt.pbk
copy Alt.pbk + Neu.txt Aktuell.pbk

Für das Entfernen der veralteten Einträge wäre es vielleicht sinnvoll, zunächst einmal ein Beispiel für den Inhalt einer .pbk-Datei zu posten.

Grüße
bastla
transwarp
transwarp 06.03.2007 um 23:07:22 Uhr
Goto Top
Hey bastla, erstmal vielen Dank für deine Antwort!

Die idee hatte ich auch schon und so ähnlich wie du in die Tat umgestezt allerdings mit einer for schleife! Das hat auch alles geklappt!

Aufbau der .pbk Datei ist immer gleich! (denke ich zumindestens)
Liegt übrigens "C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Microsoft\Network\Connections\Pbk" in diesem Verzeichniss

Jede Verbindung beginnt mit

[Verbindungsname]
"verschiedene Werte"

endet leider erst wieder mit dem neuanfang eines [ bzw. dem Ende der Datei.

Habe leider bis jetzt noch keine Lösung gefunden und wäre über weitere Hilfe dankbar!

Gruß
bastla
bastla 06.03.2007 um 23:57:49 Uhr
Goto Top
Hallo transwarp!

Soferne in der .pbk-Datei (ich habe derzeit leider keine zum Testen bei der Hand) nicht irgendwelche störenden Sonderzeichen enthalten sind, könnte der folgende Batch funktionieren:
@echo off & setlocal
rem Parameter 1 = .pbk-Datei
rem Parameter 2 = Suchstring, zB [AOL]
if not exist "%~1" goto :Verwendung  
if (%2) neq () goto :Ausf
:Verwendung
echo Beim Aufruf einen existierenden Dateinamen und den Suchstring angeben!
goto :eof
:Ausf
set "Suche=%~2"  
set "AltName=Alt.pbk"  
set "Alt=%~dp1%AltName%"  
set "Neu=%~1"  
if exist "%Alt%" del "%Alt%"  
ren "%Neu%" "%AltName%"  
set Behalten=ja
for /f "delims=" %%i in ('type "%Alt%"') do call :BearbeiteZeile "%%i"  
echo %Suche% wurde entfernt.
goto :eof
:BearbeiteZeile
set "Zeile=%~1"  
if %Behalten%==ja goto :Kontrolle
if %Zeile:~0,1% neq [ goto :eof
set Behalten=ja
goto :Schreiben
:Kontrolle
(echo %Zeile%)|find /i "%Suche%">nul || goto :Schreiben  
set Behalten=nein
goto :eof
:Schreiben
(echo %Zeile%)>>"%Neu%"  
goto :eof
Wenn die Batchdatei nach Anpassung der Pfade für "Alt" und "Neu" zB als "C:\Scripts\EntferneAusPBK.bat" gespeichert wurde, wäre sie wie folgt aufzurufen:
C:\Scripts\EntferneAusPBK.bat "C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Microsoft\Network\Connections\Pbk\rasphone.pbk" [AOL]  
Dass alle ev enthaltenen Leerzeilen abhanden kommen, müsste zu verkraften sein. Sollte es mit Batch nicht klappen (Sonderzeichen), ließe sich der selbe Ablauf auch als VBScript umsetzen.

Grüße
bastla

[Edit] Parameter angepasst [/Edit]
[Edit2] set "Suche=%2" um ~ ergänzt [/Edit2]
Biber
Biber 07.03.2007 um 10:25:03 Uhr
Goto Top
...oder, da diese *.pbk ja offensichtlich denselben Aufbau hat wie eine beliebige Windows-.ini-Datei, wäre eventuell eine kurze Suchmaschinenbefragung nach "IniTools" (oder ähnlich) hilfreich.

Es gibt diverse Freeware-Hilfsutilities, die Ini-Daten "[Section]"-weise ergänzen, löschen, bearbeiten können.

Ein native batch wäre hier, da stimme ich bastla zu, sicherlich nur die dritt- oder viertschlechteste Alternative.

Gruss
Biber
transwarp
transwarp 07.03.2007 um 10:34:27 Uhr
Goto Top
Hi ja klar wäre eine alternative aber denke nicht das dies das Ziel ist, da dieses tool auf vielen Rechnern laufen soll und nicht nur die vorhandenen DFÜ Verbindungen ersetzten soll! Da es unterschiedliche konfigurationen gibt!

Ziel des Batch ist eine zusätzliche Einrichtung einer neuen DFÜ-Verbindung sowie löschen von bestimmten DFÜ-Verbindungen(wenn vorhanden)!

Bin leider Neu auf dem gebiet der Batch und würde mich über hilfe freuen!

LG
transwarp
transwarp 08.03.2007 um 11:15:55 Uhr
Goto Top
Hallo Community, vielleicht kann ja jemand nochmal helfen erstmal vielen Dank an Bastla! TOP!

Das Ausführen des Scripts funktioniert aber wenn als beispiel mehrer [AOL] verbindungen vorhanden sind(wir gehen mal von 4 STück aus) überspringt er jedesmal die zwischenliegende!

[AOL MODEM]
werte...

[AOL ISDN] <- diese wird jedesmal übersprungen und wird erst bei 2tem ausführen gelöscht.
werte...

[AOL DSL]
werte...

Das Script sucht ja immer nach "["

Wer kann mir helfen es zu optimieren?
bastla
bastla 08.03.2007 um 13:48:53 Uhr
Goto Top
Hallo transwarp!

Vielleicht nicht ganz elegant, aber hoffentlich doch effektiv:
copy /y "C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Microsoft\Network\Connections\Pbk\rasphone.pbk" "C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Microsoft\Network\Connections\Pbk\Sicherung.pbk" > nul  
for %%s in ("[AOL MODEM]" "[AOL ISDN]" "[AOL DSL]") do C:\Scripts\EntferneAusPBK.bat "C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Microsoft\Network\Connections\Pbk\rasphone.pbk" "%%~s"  
Damit wird zwar die .pbk-Datei für jeden einzelnen "[AOL ...]"-Eintrag (Anführungszeichen bitte nicht vergessen) einmal durchgeackert, aber damit solltest Du alle Einträge mit einem einzelnen Aufruf los werden ...

Falls die "Sicherung.pbk" nicht benötigt wird (auf "Alt.pbk" kann man sich jetzt nicht mehr verlassen, da diese bei jedem Durchlauf mit dem Ergebnis des vorigen Durchlaufs überschrieben wird), einfach die erste Zeile weglassen.

Die zweite Zeile ist für eine Verwendung in einer Batchdatei geschrieben - von der Commandline wäre jedes %% durch ein einfaches % zu ersetzen.

Vor dem Testen solltest Du noch in der Batchdatei ("EntferneAusPBK.bat") eine Zeile ändern, indem Du sie mit ~ ergänzt (hätte auch in der ursprünglichen Fassung schon hingehört - ich trage es auch oben nach):
set "Suche=%<b>~</b>2"  

Grüße
bastla
transwarp
transwarp 09.03.2007 um 11:49:23 Uhr
Goto Top
Hallo ihr,

Tool funktioniert jetzt ganz gut und läuft auch durch!

Nun zu meiner Frage ich habe jetzt das Problem, dass wenn ich die Daten ersetzt bzw. getauscht habe, und später die erweiterten Eigenschaften aufrufen will der Explorer.exe abstürzt! (Rechtsklick auf DFÜ-Verbindung ->Eigenschaften -> Netzwerkverbindung auswählen -> Rechstklick -> Erweitert) normalerweise sind dort die Infos für Firewalleinstellungen etc. drinn! Kann es sein das ich noch irgendwelche REG einträge brauche die ich nicht besitzte!? Habe schon geguckt er erstellt leider nichts neues beim Anlegen einer neuen Verbindung in der REG zumindestens habe ich nichts gefunden! Daten in der RASPHONE.pbk passen auch und sind identisch!

Folgende Fehlermeldung gibt er aus:
AppName: explorer.exe AppVer: 6.0.2900.2180 ModName: hnetcfg.dll
ModVer: 5.1.2600.2180 Offset: 00018251
Der Problembericht ist Kilometer lang


Habe mir mal die hnetcfg angeguckt, Sie ist für den HOME Network Config Manager zuständig(deswegen auch der Name) Habe die neues von Microsoft veröffentlichte Version!

Mein System

MS Win XP Pro
SP2 V. 2002


Gruß
Transwarp