'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 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