Blade1981 10 Geschrieben 19. September 2007 Melden Teilen Geschrieben 19. September 2007 Hallo! Hat jemand zufällig ein VB-Script, mit welchem man ein Dateiverzeichnis mit Unterverzeichnissen nach Dateiinhalten durchsuchen lassen kann und bestimmte Dateiinhalte ersetzen kann? Ich habe ich in einem Ordner mehrere Unterordner und in jedem Ordner ist eine unterschiedliche Datei, in der ein bestimmter Wert steht, welcher durch einen anderen Wert ersetzt werden soll. Danke bereits für eure Hilfe! Zitieren Link zu diesem Kommentar
Gadget 37 Geschrieben 20. September 2007 Melden Teilen Geschrieben 20. September 2007 Moin Blade, was für ein Dateiformat haben denn die zu ändernden Daten? Txt, XML etc...etc...? LG Gadget Zitieren Link zu diesem Kommentar
Blade1981 10 Geschrieben 20. September 2007 Autor Melden Teilen Geschrieben 20. September 2007 Moing! Es handelt sich um ini-Dateien, reg-Dateien und batch-Dateien. Also im Grunde wie Textdateien zu behandeln. Zitieren Link zu diesem Kommentar
Blade1981 10 Geschrieben 20. September 2007 Autor Melden Teilen Geschrieben 20. September 2007 Kann mir zumindest jemand sagen, wie ich einen bestimmten Text in einer Datei per VBScript ändern kann? Zum Beispiel soll in einer gesamten Textdatei das Wort "irgendeins" durch das Wort "bestimmte" ersetzt werden. Zitieren Link zu diesem Kommentar
Blade1981 10 Geschrieben 20. September 2007 Autor Melden Teilen Geschrieben 20. September 2007 Also gut, das hab ich jetzt - für eine bestimmte Datei in einem bestimmten Pfad. Jetz muss ich nur noch jede Datei in dem Verzeichnis und jedem Unterverzeichnis einlesen. Kann mir jemand sagen wie das geht? Zitieren Link zu diesem Kommentar
~~~Dexter~~~ 10 Geschrieben 21. September 2007 Melden Teilen Geschrieben 21. September 2007 @Blade1981 Hier hast Du meinen Lösungsvorschlag zu Deinem Problem. Leider ist es in VBSkipt nicht möglich, einen Zeiger auf die Zeile, in die die Entsprechung gefunden wurde, zu bekommen. Deshalb muss die Datei neuerstellt werden. Option Explicit Function SuchenUndErsetzenInDatei(Verzeichnispfad, Suche, Ersetze) Const LESEND = 1 Const SCHREIBEND = 2 Dim FSO, Verzeichnis, Unterverzeichnis, Datei, DateiInhalt, Dateierweiterung, RegAusdruck Set FSO = CreateObject("Scripting.FileSystemObject") Set Verzeichnis = FSO.GetFolder(Verzeichnispfad) Set RegAusdruck = CreateObject("VBScript.RegExp") For Each Datei In Verzeichnis.Files Dateierweiterung = LCase(FSO.GetExtensionName(Datei)) If Dateierweiterung = "bat" Or Dateierweiterung = "ini" Or Dateierweiterung = "reg" Then With RegAusdruck .Pattern = Suche .IgnoreCase = True .Global = True 'On Error Resume Next DateiInhalt = FSO.OpenTextFile(Datei,LESEND).ReadAll If .Test(DateiInhalt) Then FSO.OpenTextFile(Datei, SCHREIBEND, True).Write .Replace(DateiInhalt, Ersetze) End If 'On Error Goto 0 End With End If Next For Each Unterverzeichnis In Verzeichnis.Subfolders SuchenUndErsetzenInDatei Unterverzeichnis, Suche, Ersetze Next End Function SuchenUndErsetzenInDatei "C:\Dokumente und Einstellungen\Administrator\", "hallo", "guten tag" Zitieren Link zu diesem Kommentar
Blade1981 10 Geschrieben 21. September 2007 Autor Melden Teilen Geschrieben 21. September 2007 @ ~~~Dexter~~~ Echt cool, super danke! :) Hattest du das Script mal schnell geschrieben (good Job!!) oder schon wo rumliegen? Sag mal... Weißt du auch, ob man Verknüpfungen per Script erstellen kann, oder vorhandene Verknüpfungen anpassen kann? Geht um "Ausführen in" und natürlich im das Ziel der Verknüpfung. Wenn das noch ginge, das wäre dann schon fast perfekt ;) Danke nochmals! Zitieren Link zu diesem Kommentar
~~~Dexter~~~ 10 Geschrieben 21. September 2007 Melden Teilen Geschrieben 21. September 2007 @Blade1981 Ich habe es mal eben aus dem Ärmel geschüttelt. :D Die CreateShortcut(strPathname)-Methode des WshShell-Objekts erstellt eine neue Verknüpfung oder öffnet eine vorhandene Verknüpfung. Hier ist ein Beispiel Set WshShell = WScript.CreateObject("WScript.Shell") Desktop = WshShell.SpecialFolders("Desktop") Set Verknuepfung = WshShell.CreateShortcut(Desktop & "\Shortcut Script.lnk") With Verknuepfung .TargetPath = WScript.ScriptFullName .WindowStyle = 1 .Hotkey = "CTRL+SHIFT+F" .IconLocation = "notepad.exe, 0" .Description = "Shortcut Script" .WorkingDirectory = Desktop .Save End With Zitieren Link zu diesem Kommentar
Blade1981 10 Geschrieben 21. September 2007 Autor Melden Teilen Geschrieben 21. September 2007 @ ~~~Dexter~~~ Nicht schlecht ;) *respect* Habe nun allerdings ein Problem mit dem Script. Es geht alle Unterverzeichnisse durch, das habe ich schon getestet. Aber .ini-Dateien und .reg-Dateien ändert er mich nicht ab, weißt du warum? Die Dateiattribute sind nicht versteckt und nicht schreibgeschützt! Wenn ich eine .bat-Datei kopiere und dann als .ini umbenenne, wird diese umgeschrieben. Im selben Verzeichnis die richtige .ini-Datei allerdings nicht! Kopiere ich den Inhalt der .bat-Datei in die ini-Datei, funktioniert es genauso wenig :( Erstelle ich allerdings eine neue Textdatei, benenne sie in diese .ini-Datei um und kopiere den Inhalt der originalen.ini-Datei hinein, dann macht er die Änderung... :suspect: P.S.: Wenn ich eine Datei selbst verstecke, dann bricht das Script ab mit dem Fehler "zugriff verweigert". Was mich wundert, da es ja eine versteckte Datei ist und nicht eine schreibgeschützte Datei. Die originale Datei ist auch versteckt und bei dieser kommt kein Fehler. Alles sehr merkwürdig... Zitieren Link zu diesem Kommentar
~~~Dexter~~~ 10 Geschrieben 21. September 2007 Melden Teilen Geschrieben 21. September 2007 @Blade1981 Mir fällt leider nicht ad hoc ein, wo ran es liegen kann. Ich habe das Skript nochmal ausgeführt, die veränderten Dateienn mitgelogt. Bei mir verändert das Skript ini- und reg-Dateien. Kann es vielleicht daran liegen, dass sich die Dateien in Verwendung befinden? Müsste ich nach dem Wochenende noch mal ausprobieren. Zitieren Link zu diesem Kommentar
Blade1981 10 Geschrieben 24. September 2007 Autor Melden Teilen Geschrieben 24. September 2007 @~~~Dexter~~~ Hallöchen! Ich habe festgestellt, dass die Datei nicht ausgelesen wird. Aus welchem Grund auch immer. Lasse ich den Inhalt der Datei in eine andere Datei schreiben, so ist diese ohne Inhalt. Hast du eine Erklärung dafür, dass sie nicht ausgelesen wird? Ich kann sie ja mal online stellen. fdeploy.zip Zitieren Link zu diesem Kommentar
~~~Dexter~~~ 10 Geschrieben 25. September 2007 Melden Teilen Geschrieben 25. September 2007 @Blade1981 Der Textinhalt ist in Unicode formatiert. Damit Du auch solche Dateien verabeitet kannst, ändere die Textzeile: DateiInhalt = FSO.OpenTextFile(Datei, LESEND).ReadAll in DateiInhalt = FSO.OpenTextFile(Datei, LESEND, False, TriStateTrue).ReadAll. Zusätzlich muss Du am Funktionsanfang die Konstante TriStateTrue = -1 definieren. Zitieren Link zu diesem Kommentar
Blade1981 10 Geschrieben 25. September 2007 Autor Melden Teilen Geschrieben 25. September 2007 OK, macht das einen großen Unterschied für Windows, wenn der Text im Unicode formatiert ist? Wird wohl darauf ankommen, für welchen Zweck, hm? Weißt du das bei Registry-Änderungen, ob es hier eine Rolle spielt? Ich werde das mal ausprobieren mit deinem Vorschlag des geänderten Codes. Vielen Dank :jau: :thumb1: >>Respekt<< Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.