Jump to content

Dateiinhalte ersetzen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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!

Link zu diesem Kommentar

@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"

Link zu diesem Kommentar

@ ~~~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!

Link zu diesem Kommentar

@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

Link zu diesem Kommentar

@ ~~~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: :confused:

 

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

Link zu diesem Kommentar

@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.

Link zu diesem Kommentar

@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.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...