'v2.7******************************************************** ' File: StringInDateiTauschen.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 ' Zeichenkette zukünftig aussehen soll angezeigt und ' kann geändert werden. '************************************************************ 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, StringAlt, StringNeu, 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 Text1 = Text1 & vbCRLF & " " & TextX End If Loop FinList.Close Set FinList = nothing TextX = "" TextX = TextX & "In folgenden Dateien werden Zeichenketten 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 Zeichenfolge (StringAlt), die erstezt werden soll?" StringAlt = InputBox ( Text1 , WSCript.ScriptName , StringAlt) If StringAlt = "" then WSHShell.PopUp " . . . dann eben nicht!", , WScript.Scriptname WSCript.Quit End If Text1 = "" Text1 = Text1 & "Folgende Zeichenfolge (StringAlt) soll in den soeben gezeigten Dateien ausgetauscht werden." Text1 = Text1 & "Ändern Sie jetzt diese Zeichenkette, um festzulegen, wie die Zeichenkette in Zukunft (StringNeu) aussehen soll." StringNeu = InputBox ( Text1 , WSCript.ScriptName , StringAlt) If StringNeu = "" then WSHShell.PopUp " . . . dann eben nicht!", , WScript.Scriptname WSCript.Quit End If If StringAlt = StringNeu then WSHShell.PopUp "Wenn StringNeu" & vbCRLF & " " & StringNeu & vbCRLF & "und StringAlt" & vbCRLF & " " & StringAlt & vbCRLF & "gleich sind, wird's nichts!", , WScript.Scriptname WSCript.Quit End If TextX = "DAS IST DIE LETZTE WARNUNG!" & vbCRLF & vbCRLF & TextX 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 & Zeichenkette(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 ' MsgBox textx Text3 = StringInDateiTauschen( TextX, StringAlt, StringNeu) ' 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 StringInDateiTauschen (Datei, Suchen, Ersetzen) Dim FileContents, dFileContents if not WScript.CreateObject("Scripting.FileSystemObject").FileExists(Datei) then WScript.CreateObject("WScript.Shell").PopUp "Datei nicht gefunden!", 15, WScript.Scriptname if not WScript.CreateObject("Scripting.FileSystemObject").FileExists(Datei) then Exit Function FileContents = WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile(Datei).ReadAll ' Datei einlesen dFileContents = Replace(FileContents, Suchen, Ersetzen, 1, -1, 1) ' Ersetze alle Strings im Quellfile If dFileContents <> FileContents Then ' Vergleiche Quelle und Ergebnis WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile(Datei, 2, True).Write dFileContents ' Schreibe Ergebnis wenn Unterschied besteht ' WScript.CreateObject("WScript.Shell").PopUp "Austausch in Datei """ & Datei & """ abgeschlossen " , 1, WSCript.ScriptName, vbExclamation Else ' WScript.CreateObject("WScript.Shell").PopUp "Der angegebene String ==|" & Suchen & "|== konnte nicht in der Datei """ & Datei & """ gefunden werden." , 5, WSCript.ScriptName, vbExclamation End If End Function ' StringInDateiTauschen