Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Rookie-Doo

Rookie-Doo (Level 1) - Jetzt verbinden

04.06.2008, aktualisiert 07.06.2008, 4262 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 ..
Ähnliche Inhalte
Batch & Shell

Mehrere Wörter ersetzen Powershell Skript

gelöst Frage von Beginner01Batch & Shell4 Kommentare

Hallo an die Gemeinde! Ich habe eine Textdatei, in der ich mehrere verteilte Wörter mittels Windows Powershell ersetzen möchte. ...

Grafik

Mehrere PDF-Dateien Wörtern durchsuchen

Frage von EmheonivekGrafik2 Kommentare

Liebe Community, wir bekommen von einer externen Firma in wiederkehrenden Abständen viele PDF-Dateien in einem Arbeitsordner zur Verfügung gestellt. ...

Microsoft Office

Text in mehreren .docx suchen und ersetzen

gelöst Frage von DerWoWussteMicrosoft Office14 Kommentare

Moin Kollegen. Ich hoffe auf Antworten von Leuten, die genau das per Tool schon mal gemacht haben: Selektiere mehrere ...

Microsoft Office

Mehrere Dokumente mit fehlerhafter Formatierung (Schriftbild)

Frage von 90584Microsoft Office4 Kommentare

Hallo, ich hab mal eine Frage. Ich habe bei einem Bekannten von mir folgendes Problem wo ich den Fehler ...

Neue Wissensbeiträge
Humor (lol)
(Part num your Hacked phone. +XX XXXXXX5200)
Erfahrungsbericht von Henere vor 1 TagHumor (lol)4 Kommentare

Mein Handy hat aber ne ganz andere Endnummer. Muss ich mir jetzt Sorgen machen ? :-) Vielleicht betrifft es ...

Exchange Server

Letztes Update für Exchange 2016 CU9 war in gewisser Weise destruktiv

Erfahrungsbericht von DerWoWusste vor 1 TagExchange Server6 Kommentare

Kurzer Erfahrungsbericht zu Exchange2016-KB4340731-x64 Der Exchangeserver hat wie gewöhnlich versucht, es in der Nacht automatisch zu installieren - abgesehen ...

Erkennung und -Abwehr

Neue Sicherheitslücke Foreshadow (L1TF) gefährdet fast alle Intel-Prozessoren

Information von Frank vor 2 TagenErkennung und -Abwehr3 Kommentare

Eine neue Sicherheitslücke, genannt Foreshadow (alias L1TF) wurde auf der Usenix Security 18 von einem Team internationaler Experten veröffentlicht. ...

Vmware
VMware Updates gegen L1 Lücke
Information von sabines vor 2 TagenVmware

Für die Vmware Produkte vCenter Server, ESXi, Workstation und Fusion stehe Updates bereit um die L1 Lücke zu schließen. ...

Heiß diskutierte Inhalte
Windows Server
Domäne einsilbig mit nur einem Namen benannt - sowie AD und MX auf einer VM Kardinalsfehler?
Frage von TomTestWindows Server51 Kommentare

Hallo liebe Freunde gepflegter Probleme, seit kurzem soll ich eine Domäne verwalten die zuvor von einem IT-Dienstleister erstellt und ...

DSL, VDSL
Router Neustarts
Frage von XerebusDSL, VDSL16 Kommentare

Hallo an alle, ich hab eine Problem mit dem Neustart von meiner Fritz Box wo ich einfach nicht mehr ...

Windows Server
Windows Server per Web auf Daten zugreifen und verwalten
Frage von matze2090Windows Server16 Kommentare

Hallo, ich würde gerne von außen auf meinem Windows Server zugreifen um auf meine Daten zu verwalten. Meine frage ...

Webbrowser
Neuer Tab Firefox
gelöst Frage von BleifussWebbrowser12 Kommentare

Hallo, via Strg + T öffnet man ja einen neuen Tab. Gibt es die Möglichkeit, dass der Tab sich ...