'v3.6***************************************************** ' File: StringInDatei.vbs ' Autor: dieseyer@gmx.de ' dieseyer.de ' ' Script sucht in einer Datei nach einer Zeichenkette und ' speichert jede Zeile, die diese Zeichenkette enthält, mit ' Zeilennummer in eine andere Datei. '********************************************************* Option Explicit ' Siehe http://dieseyer.de/dse-wsh-lernen.html#OptionExpl Dim WSHShell, FSO, FileIn, FileOut Dim EingDatei, Ausgdatei, ZKette, Zeile, Antwort, i Set WSHShell = WScript.CreateObject("WScript.Shell") Set FSO = CreateObject("Scripting.FileSystemObject") EingDatei = "error.log" AusgDatei = "fehler.log" ZKette = "msgbox" ZKette = InputBox ("Nach welcher Zeichenkette soll in einer Datei gesucht werden?", WScript.ScriptName, ZKette) If ZKette = "" then WSHShell.Popup (". . . denn eben nicht!"), 3, WScript.ScriptName, 64 WScript.Quit End If EingDatei = InputBox ("Welche Datei soll nach '" & ZKette & "' durchsucht werden?", WScript.ScriptName, EingDatei) If EingDatei = "" then WSHShell.Popup (". . . denn eben nicht!"), 3, WScript.ScriptName, 64 WScript.Quit End If if not fso.FileExists(EingDatei) Then WSHShell.Popup (EingDatei & "existiert nicht. Zur Demo wird dieses Skript " & WScript.ScriptName & " nach " & EingDatei & " kopiert."), 3, WScript.ScriptName, 64 FSO.CopyFile WScript.ScriptName, EingDatei ' fals Datei nicht vorhanden, dieses Script nach error.log kopieren - zum Testen End If if not fso.FileExists(EingDatei) Then ' fals Datei nicht vorhanden MsgBox "Datei " & EingDatei & " zum Einlesen fehlt.", , WScript.ScriptName WScript.Quit End If AusgDatei = InputBox ("In welche Datei sollen die Zeilen mit der Zeichenkette" & vbCRLF & "'" & ZKette & "'" & vbCRLF & "gespeichert werden?", WScript.ScriptName, AusgDatei) If AusgDatei = "" then WSHShell.Popup (". . . denn eben nicht!"), 3, WScript.ScriptName, 64 WScript.Quit End If if fso.FileExists(AusgDatei) Then Antwort = MsgBox (AusgDatei & " existiert bereits - soll sie gelöscht werden?", 4+32+256, WScript.ScriptName) If Antwort = vbYes then fso.DeleteFile(AusgDatei), True End If Set FileIn = FSO.OpenTextFile(EingDatei, 1 ) ' Datei zum Lesen öffnen Set FileOut = fso.OpenTextFile(AusgDatei, 8, true) ' Datei zum Erweitern öffnen (notfals anlegen) fileOut.WriteLine( vbCRLF & now() & vbTab & "Zeichenkette '" & ZKette & "' gefunden in Zeile(n):") i=0 Do While Not (FileIn.atEndOfStream) ' wenn Datei nicht zu ende ist, weiter machen i = i + 1 Zeile = FileIn.Readline ' eine Zeile lesen If InStrRev( UCase( Zeile), UCase( ZKette)) > 0 Then fileOut.WriteLine(i & vbTab & ":" & Zeile) ' InStrRev(..) sucht von hinten, ob Zeichenfolge vorhanden ' ist und gibt die Position des ersten Auftretens zurück - ' wenn die Positon größer als 1, wird die Zeile in die ' Ausgabedatei geschrieben ' If InStr(TextU, ZKette) > 0 Then fileOut.WriteLine(i & vbTab & TextU) ' InStr(..) sucht von vorn, . . . Loop FileIn.Close Set FileIn = Nothing ' Datei schließen FileOunt.Close Set FileOut = Nothing ' Datei schließen WSHShell.Run AusgDatei ' WSHShell.Run "Notepad.exe " & AusgDatei