http://dieseyer.de • all rights reserved • © 2011 v11.4

'v2.7********************************************************
' File: ZeileInDateiTauschen.vbs
' Autor: dieseyer@gmx.de
' dieseyer.de
'
' In den Zeilen dürfen keine Anführungszeichen " stehen!
'
' dateiliste.txt stellt eine Liste der zu prüfenden Dateien
' bereit. Beim Skriptaufruf wird nach der zu suchenden
' Zeichenkette gefragt. Diese wird bei der Abfrage, wie die
' Zeile zukünftig heissen soll angezeigt und kann geändert
' werden. (Am einfachsten: zu suchende Zeile in die Zwischen-
' ablage übernehmen und beim Such-String eigeben.)
' (Ich habe damit in meinen HTML-Dateien u.a. das Bild und
' das <meta name="DC.Date" ... > Tag geändert.)
'************************************************************

Option Explicit ' Siehe http://dieseyer.de/dse-wsh-lernen.html#OptionExpl

Dim fso, fo, fi, FinList, Fin, Fout
Dim Ziel, Quelle, WSHShell, ZielVerz
Dim TextX, Text1, Text2, Text3, Txt(), i, i1
Dim aHTML, eHTML, ZeileAlt, ZeileNeu, iText, DateiListe

Set WSHShell = WScript.CreateObject("WScript.Shell")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")

ZielVerz = "m:\dieseyer.test"
ZielVerz = fso.GetParentFolderName( WScript.ScriptFullName )
DateiListe = ZielVerz & "\dateiliste.txt"

If not fso.FileExists( DateiListe ) Then MsgBox DateiListe & " existiert nicht!", , WSCript.ScriptName
If not fso.FileExists( DateiListe ) Then WScript.Quit

'---------------------------------------------------------
' DateiListe zeilenweise lesen (für Anzeige)
'---------------------------------------------------------
iText = ""
Set FinList = FSO.OpenTextFile( DateiListe, 1 ) ' Datei zum Lesen öffnen
Do While Not (FinList.atEndOfStream) ' wenn Datei nicht zu ende ist, weiter machen
TextX = FinList.Readline ' eine Zeile lesen
If not Left ( TextX, 1 ) = ";" AND not Left ( TextX, 1 ) = " " then
If iText = "" Then iText = TextX
Text1 = Text1 & vbCRLF & " " & TextX
End If
Loop
FinList.Close
Set FinList = nothing


TextX = ""
TextX = TextX & "In folgenden Dateien werden Zeilen ausgetauscht:" & vbCRLF
TextX = TextX & Text1
i = MsgBox (TextX, 4 + 32 +256, WScript.Scriptname)
If not i = vbYes then MsgBox " . . . dann eben nicht!", , WScript.Scriptname
If not i = vbYes then WScript.Quit

Text1 = ""
Text1 = Text1 & "Wie lautet die komplette Zeile (ZeileAlt), die komplett erstezt werden soll?"
ZeileAlt = InputBox ( Text1 , WSCript.ScriptName , ZeileAlt)
If ZeileAlt = "" then
WSHShell.PopUp " . . . dann eben nicht!", , WScript.Scriptname
WSCript.Quit
End If

Text1 = ""
Text1 = Text1 & "Folgende Zeile (ZeileAlt) soll in den soeben gezeigten Dateien ausgetauscht werden."
Text1 = Text1 & "Ändern Sie jetzt diese Zeichenkette, um festzulegen, wie die Zeile in Zukunft (ZeileNeu) aussehen soll."
ZeileNeu = InputBox ( Text1 , WSCript.ScriptName , ZeileAlt)
If ZeileNeu = "" then
WSHShell.PopUp " . . . dann eben nicht!", , WScript.Scriptname
WSCript.Quit
End If
If ZeileAlt = ZeileNeu then
WSHShell.PopUp "Wenn ZeileNeu" & vbCRLF & " " & ZeileNeu & vbCRLF & "und ZeileAlt" & vbCRLF & " " & ZeileAlt & vbCRLF & "gleich sind, wird's nichts!", , WScript.Scriptname
WSCript.Quit
End If

TextX = "DAS IST DIE LETZTE WARNUNG!" & vbCRLF & vbCRLF & TextX
i = vbYes
' i = MsgBox (TextX, 4 + 48 +256, WScript.Scriptname)
If not i = vbYes then MsgBox " . . . dann eben nicht!", , WScript.Scriptname
If not i = vbYes then WScript.Quit

Text1 = ""
Text2 = ""
'---------------------------------------------------------
' DateiListe zeilenweise lesen & Zeile(n) tauschen
'---------------------------------------------------------
Set FinList = FSO.OpenTextFile( DateiListe, 1 ) ' DateiListe-Datei zum Lesen öffnen
Do While Not (FinList.atEndOfStream) ' wenn DateiListe-Datei nicht zu ende ist, weiter machen
TextX = FinList.Readline ' eine Zeile lesen
If not Left ( TextX, 1 ) = ";" AND not Left ( TextX, 1 ) = " " then
If not Text2 = "" then
Text1 = Text1 & vbCRLF & TextX & vbTab & " übersprungen"
Else

Text3 = ZeileInDateiTauschen (TextX, ZeileAlt, ZeileNeu) ' Function Aufruf

' if vbcancel = WSHShell.Popup (TextX & " . . . wurde bearbeitet.", 1, WScript.ScriptName, 1 + 64 ) Then Text2 = "übergehen"
Text1 = Text1 & vbCRLF & TextX & Text3
' Text1 = Text1 & vbCRLF & TextX & i
End If
End If
Loop
FinList.Close
Set FinList = nothing

MsgBox Text1, , WScript.ScriptName


WScript.Quit

'---------------------------------------------------------
Function ZeileInDateiTauschen (Datei, Suchen, Ersetzen)
'---------------------------------------------------------
Dim Fin, Fout, TextX, i

if not WScript.CreateObject("Scripting.FileSystemObject").FileExists(Datei) then
WScript.CreateObject("WScript.Shell").PopUp "Datei """ & Datei & """ nicht gefunden!", 1, WSCript.ScriptName, vbExclamation
ZeileInDateiTauschen = " " & vbTab & " nicht gefunden"
Exit Function
End If

WScript.CreateObject("Scripting.FileSystemObject").CopyFile Datei, Datei & ".tmp"
Set Fin = WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile( Datei & ".tmp", 1 ) ' Datei zum Lesen öffnen
Set Fout = WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile( Datei , 2, true) ' Datei neu anlegen & zum Schreiben öffnen

Do While Not (Fin.atEndOfStream) ' wenn Datei nicht zu Ende ist, weiter machen
TextX = Fin.Readline ' eine Zeile lesen
If InStr( TextX, Suchen ) > 0 Then
i = i + 1
Fout.WriteLine Ersetzen
Else
Fout.WriteLine TextX
End If
Loop
Fin.Close
Set Fin = Nothing ' Datei schließen
Fout.Close
Set Fout = Nothing ' Datei schließen

If i > 0 Then
' WScript.CreateObject("WScript.Shell").PopUp "Austausch in Datei """ & Datei & """ abgeschlossen " , 1, WSCript.ScriptName, vbExclamation
ZeileInDateiTauschen = " " & vbTab & i & " Zeile(n) getauscht."
Else
' WScript.CreateObject("WScript.Shell").PopUp "Die angegebene Zeile ==|" & Suchen & "|== konnte nicht in der Datei """ & Datei & """ gefunden werden." , 5, WSCript.ScriptName, vbExclamation
ZeileInDateiTauschen = " " & vbTab & " Zeile nicht gefunden."
End If
' WSCript.Sleep 2
'_____________________________________________
' folgende Zeile löscht die Sicherheitskopien
' WScript.CreateObject("Scripting.FileSystemObject").DeleteFile Datei & ".tmp", True
End Function ' ZeileInDateiTauschen

http://dieseyer.de • all rights reserved • © 2011 v11.4