Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Wort in mehreren Dokumenten durch Textabschnitt ersetzen

Frage Microsoft Windows Tools

Mitglied: Rookie-Doo

Rookie-Doo (Level 1) - Jetzt verbinden

04.06.2008, aktualisiert 07.06.2008, 4198 Aufrufe, 11 Kommentare

Hallo,

ja, ich weiß, es gibt unzählige Lösungen, die ein Wort durch eine Textphrase ersetzen lassen können, keine Frage. Allerdings suche ich etwas für folgendes Problem:

Ich möchte in einer recht unmfangreichen Zahl von html-Dokumenten vor den <html>-Tag die Doctype-Deklarierung setzen lassen - mit zwei Zweilenumbrüchen Abstand dazwischen.
Das gleiche an den Dokumentenenden für die Einfügung von GoogleAnalytics-tags.

Also nicht nur eine Zeichenfolge durch eine Zeichenfolge ersetzen lassen, sondern eine Zeichenfolge durch eine Zeichenfolge mit einem bestimmten mehrzeiligen Format!

Kennt jemand eine Methode für dieses Problem?

Gruß und vielen Dank im Voraus
rkd
Mitglied: bastla
04.06.2008 um 21:36 Uhr
Hallo Rookie-Doo!

Warum stellst Du nicht gleich konkret mit einer Gegenüberstellung "Vorher" - "Nachher" (der relevanten Teile) dar, welche Änderung Du durchführen möchtest?

Dann zeigt sich hoffentlich, ob es vielleicht schon genügen würde, jeweils einige Zeilen an Anfang und Ende der vorhandenen Dateien zu setzen ...

Grüße
bastla
Bitte warten ..
Mitglied: Rookie-Doo
04.06.2008 um 21:46 Uhr
Hallo bastla,

erstmal vielen Dank für die schnelle Antwort.

Weil ich hoffe, einen Universalmethode zu erfahren, damit ich ähnliche Probleme in Zukunft damit ebenfalls angehen kann.

Bezüglich des Doctypes-Tag trifft "Anfang der Datei" zu, allerdings schon nicht mehr bei dem GoogleAnalytics-Tag.

Gruß
rkd
Bitte warten ..
Mitglied: bastla
04.06.2008 um 22:41 Uhr
Hallo Rookie-Doo!

Clevere Vorgangsweise - so kann ich das Testen des folgenden Vorschlages guten Gewissens Dir überlassen ...

01.
'TagsErsetzen.vbs 
02.
Pfad = "D:\Dein Ordner mit vielen html-Dateien" 
03.
Typ = LCase("html") 
04.
 
05.
Von =  Array("<html>", _ 
06.
             "</Tag, nach welchem GoogleAnalytics-Tag eingefügt werden soll>") 
07.
			 
08.
Nach = Array("<Dein DocType>" & vbCrLF & vbCrLF & vbCrLF & "<html>", _ 
09.
             "</Tag, nach welchem GoogleAnalytics-Tag eingefügt werden soll>" & "<GoogleAnalytics-Tag ...... />") 
10.
 
11.
Set fso=CreateObject("Scripting.FileSystemObject") 
12.
For Each File In fso.GetFolder(Pfad).Files 
13.
    If LCase(fso.GetExtensionName(File.Path)) = Typ Then 
14.
        Text = fso.OpenTextFile(File.Path).ReadAll 
15.
        For i = 0 To UBound(Von) 
16.
            Text = Replace(Text, Von(i), Nach(i), 1, -1, 1) 
17.
        Next 
18.
        fso.OpenTextFile(File.Path, 2, True).Write Text 
19.
	End If 
20.
Next
Dieses VBScript ist mit dem Typ ".vbs" zu speichern und bearbeitet alle dem angegebenen Typ entsprechenden Dateien (im Beispiel: "*.html") des vorgegebenen Pfades. Die Ersetzung wird "in der Datei" vorgenommen (die neue Version überschreibt die alte Fassung), daher nur mit Kopien testen!

Starten kannst Du das Script aus dem Explorer per Doppelklick, da es keine Argumente erwartet.

Ersetzt wird jeweils der in "Von" angegebene Text durch dessen zeilenmäßige Entsprechung in "Nach" - dadurch ist die Anzahl variabel (was ja in Deinem Sinne sein sollte). Im Beispiel oben sind demnach 2 Paare von "Such-/Ersetzungstexten" angegeben.

Die Schreibweise dafür: Jeder Text steht unter Anführungszeichen und ist vom nächsten Text durch ein Komma getrennt. Übersichtlicher wird es, wenn zusätzlich ein Zeilenumbruch erfolgt - diesen erreichst Du über " _" am Ende der Zeile. Nach dem letzten Text endet die Zeile mit einer schließenden Klammer.

Sonderzeichen, wie der Zeilenumbruch "vbCrLF", können durch Verkettung per "&" an die konstanten Texte angefügt werden. Dies gilt auch für enthaltene Anführungszeichen, welche Du entweder durch Verdoppelung oder mit der Schreibweise Chr(34) angeben kannst - zB wäre für:
01.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
02.
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html>
entweder
01.
Nach = Array("<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN""" & vbCrLF & "     ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">" & vbCrLF & vbCrLF & vbCrLF & "<html>"
oder
01.
Nach = Array("<!DOCTYPE html PUBLIC " & Chr(34) & "-//W3C//DTD XHTML 1.0 Strict//EN" & Chr(34) & vbCrLF & "     " & Chr(34) & "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" & Chr(34) &">" & vbCrLF & vbCrLF & vbCrLF & "<html>"
zu schreiben.

Erst danach käme (bei Bedarf) als Trennung von der nächsten Zeile (um noch weitere Ersetzungstexte angeben zu können):
01.
, _
oder die schließende Klammer.

Gesucht wird "case-insensitiv", ersetzt wird entsprechend dem eingegebenen Text - aus "<HTML>" würden durch die Ersetzung demnach 3 zusätzliche Zeilen vorneweg und "<html>".

Grüße
bastla
Bitte warten ..
Mitglied: Rookie-Doo
04.06.2008 um 23:20 Uhr
Boah, krass danke!

Teste ich gleich morgen. Ersetzt das Script auch die Dateien in den Unterverzeichnissen des angegebenen Pfades? Das wäre nämlich noch überaus schön.

Gruß, vielen dank und gn8!
Bitte warten ..
Mitglied: Rookie-Doo
07.06.2008 um 17:52 Uhr
Bastla? Ist es auch möglich den Text nicht nach, sondern vor einem Tag ersetzen zu lassen?

Bezüglich des Google-Tags würde ich nämlich diesen gerne vor dem </body>-Tag erscheinen lassen.
Bitte warten ..
Mitglied: bastla
07.06.2008 um 18:01 Uhr
Hallo Rookie-Doo!

Ist es auch möglich den Text nicht nach, sondern vor einem Tag ersetzen zu lassen?
Es wird generell nicht vor oder nach, sondern einfach der gesamte Suchtext (egal ob Tag oder anderes) ersetzt - daher steht auch jeweils der in "Vor" angegebene zu ersetzende Text dann wieder in "Nach" (an der gewünschten Position).

Kurzfasssung: Ändere in "Nach" einfach für die zweite Zeile die Reihenfolge, sodass dort dann eben
01.
... 
02.
             "<GoogleAnalytics-Tag ...... />" & "</body>")
steht.

Grüße
bastla
Bitte warten ..
Mitglied: Rookie-Doo
07.06.2008 um 18:07 Uhr
Achja, logisch. Sry beim "Programmieren" merke ich einfach meine mathematisch-logischen Defizite. Hab's jetzt aber verstanden und bin schon eifrig am Testen, bekomme jedoch leder eine Syntaxfehlermeldung. Hat sicher irgendwas mit den Leerzeichen zu tun, gucke nochmal alles durch.
Bitte warten ..
Mitglied: Rookie-Doo
07.06.2008 um 18:23 Uhr
JUHUU, es funktioniert!! Vielen Dank!

Gibt allerdings noch ein Problem:

1. Wie kann ich das Sckript anweisen, auch die Unterverzeichnisse des angegebenen Verzeichnisses mit einzubeziehen?

2. Kann man das Skript anweisen, html- und htm-Dateien zu durchforsten?

3. Und da fällt mir jetzt spontan noch ein Problem ein: Ich habe bei Übernahme des betreffenden Websitenprojektes gemerkt, dass einige htm(l)-Dateien die Doctype-Deklaration enthalten. Ist es sehr kompliziert, das Skript bei diesen Dateien lediglich den Google-Tag setzen zu lassen?

Vielen Dank jedenfalls für die bisherige Hilfe, erspart mir etliche Stunden Arbeit!
Bitte warten ..
Mitglied: bastla
07.06.2008 um 18:58 Uhr
Hallo Rookie-Doo!

Das sähe dann so aus:
01.
'TagsErsetzen.vbs 
02.
Pfad = "D:\Dein Ordner mit vielen html-Dateien" 
03.
Typ = LCase("htm") 
04.
 
05.
Von =  Array("<html>", _ 
06.
    "</body>") 
07.
			 
08.
Nach = Array("<Dein DocType>" & vbCrLF & vbCrLF & vbCrLF & "<html>", _ 
09.
    "<GoogleAnalytics-Tag ...... />" & "</body>") 
10.
 
11.
LenTyp = Len(Typ) 
12.
Set fso=CreateObject("Scripting.FileSystemObject") 
13.
DoSubFolders fso.GetFolder(Pfad) 
14.
WScript.Echo "Fertig." 
15.
 
16.
Sub DoSubFolders(Folder) 
17.
For Each File In fso.GetFolder(Folder).Files 
18.
    If Left(LCase(fso.GetExtensionName(File.Path)), LenTyp) = Typ Then 
19.
        Text = fso.OpenTextFile(File.Path).ReadAll 
20.
        AbText = 0 
21.
        If InStr(1, Text, "<!DOCTYPE", vbTextCompare) Then AbText = 1 
22.
        For i = AbText To UBound(Von) 
23.
            Text = Replace(Text, Von(i), Nach(i), 1, -1, 1) 
24.
        Next 
25.
        fso.OpenTextFile(File.Path, 2, True).Write Text 
26.
    End If 
27.
Next 
28.
For Each SubFolder In Folder.SubFolders 
29.
    DoSubFolders SubFolder 
30.
Next 
31.
End Sub
Wenn in der Datei der in Zeile 21 angegebene Suchbegriff "<!DOCTYPE" (Groß- / Kleinschreibung egal) vorkommt, wird die erste in "Von" festgelegte Ersetzung übersprungen.

Grüße
bastla
Bitte warten ..
Mitglied: Rookie-Doo
07.06.2008 um 21:56 Uhr
Hat alles wunderbar und erstklassig geklappt, vielen vielen Dank bastla!
Bitte warten ..
Mitglied: BlubbBlubb17
05.07.2009 um 13:34 Uhr
Hallo,
dürfte ich das Tehma noch einmal aus der Versenkung holen?

Ich suche seit gestern auch nach einem script um alle html dokumente in einem Ordner gleich zu verändern und das oben beschriebene script scheint dafür ja ganz gut zu sein. (oder täusche ich mich? ich möchte bei allen dokumenten eine Tabelle mit einer anderen ersetzen)


Das Problem ist, dass das Script anscheinend doch eine ANweisung erwartet.
Ich erhalte immer den Fehler 800A04000.

Muss ich das Programm erst kompelieren, oder erst die entsprechenden vorher nachers Angaben im Quelltext angeben?

Grüße
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
Powershell - In Textdatei suchen und ersetzen (3)

Frage von Raaja89 zum Thema Batch & Shell ...

Windows Netzwerk
Windows Server 2003 SBS Netzwerk durch neuen Server Ersetzen (9)

Frage von MultiStorm zum Thema Windows Netzwerk ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (12)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...