Inhalt einer (zweier) Textdatei an eine bestimmte Stelle in eine andere Textdatei (htm) einfügen
Erst einmal möchte ich meinen Hut ziehen. Ich habe in den letzten Tagen und bis eben so vieles gelesen und bin platt von der Hilfsbereitschaft und den tollen Antworten.
Habe auch bereits zwei ander Probleme lösen können und das klappt echt gut. - R E S P E K T
Folgendes habe ich leider hier nicht gefunden und ich bin sicher, dass es eine Lösung gibt.
Leider reicht mein bisherigen batch-Wissen (bisher) nicht aus. Habe Grundkenntnisse in der Batch Programmierung.
In dem Ordner "F:\Eigene Dateien\Mediator 8.0 Pro\HP IBS\HTML" befinden sich etliche "*.htm" Dateien,
die ALLE dann (inhaltlich) geändert werden sollen, wenn in der Datei ein bestimmter String vorkommt.
Der Text, der zusätzlich an eine bestimmte Stelle eingefügt werden soll, ist der Inhalt einer anderen Textdatei, die in einem Paralellverzeichnis liegt.
In diesem Verzeichnis liegt auch die zu startende "start.bat"
Manuell hab ich das immer mit copy & paste gemacht, das soll jetzt besser werden.
copy c:\a.txt + c:\b.txt c:\c.txt geht nicht, da dort ja nur hintereinander geschrieben wird.
Irgendetwas mit find ist warscheinlich die Lösung.
Beschreibung:
Suche in der ersten Datei
Wenn in der Datei "impressum.htm" der String "Austausch ABC" steht, dann ERSETZE diese Wörter durch den Inhalt der Datei
"F:\Eigene Dateien\Mediator 8.0 Pro\HP IBS\Hilfsdateien\Codeschnipsel1.txt"
und
Wenn in der Datei "impressum.htm" der String "</body>" steht, dann füge in der Zeile VOR dem Wort den Inhalt der Datei
"F:\Eigene Dateien\Mediator 8.0 Pro\HP IBS\Hilfsdateien\Codeschnipsel2.txt" ein.
und
Wenn in der Datei "impressum.htm" der String "</body>" NICHT steht, jedoch der String "</html>" dann füge in der Zeile VOR dem Wort auch den Inhalt der Datei
"F:\Eigene Dateien\Mediator 8.0 Pro\HP IBS\Hilfsdateien\Codeschnipsel2.txt" ein.
Danach die Datei speichern und die nächste Datei bearbeiten.
Danach den upload starten. (Ab hier gehts wieder)
ftp -s:dateien_per_ftp_senden.ftp ( Den Inhalt der Datei "dateien_per_ftp_senden.ftp" habe ich dank Eurer Hilfe bereits fertig.)
Vielen Dank, wenn mir jemand helfen kann
Gruß Harald
Habe auch bereits zwei ander Probleme lösen können und das klappt echt gut. - R E S P E K T
Folgendes habe ich leider hier nicht gefunden und ich bin sicher, dass es eine Lösung gibt.
Leider reicht mein bisherigen batch-Wissen (bisher) nicht aus. Habe Grundkenntnisse in der Batch Programmierung.
In dem Ordner "F:\Eigene Dateien\Mediator 8.0 Pro\HP IBS\HTML" befinden sich etliche "*.htm" Dateien,
die ALLE dann (inhaltlich) geändert werden sollen, wenn in der Datei ein bestimmter String vorkommt.
Der Text, der zusätzlich an eine bestimmte Stelle eingefügt werden soll, ist der Inhalt einer anderen Textdatei, die in einem Paralellverzeichnis liegt.
In diesem Verzeichnis liegt auch die zu startende "start.bat"
Manuell hab ich das immer mit copy & paste gemacht, das soll jetzt besser werden.
copy c:\a.txt + c:\b.txt c:\c.txt geht nicht, da dort ja nur hintereinander geschrieben wird.
Irgendetwas mit find ist warscheinlich die Lösung.
Beschreibung:
Suche in der ersten Datei
Wenn in der Datei "impressum.htm" der String "Austausch ABC" steht, dann ERSETZE diese Wörter durch den Inhalt der Datei
"F:\Eigene Dateien\Mediator 8.0 Pro\HP IBS\Hilfsdateien\Codeschnipsel1.txt"
und
Wenn in der Datei "impressum.htm" der String "</body>" steht, dann füge in der Zeile VOR dem Wort den Inhalt der Datei
"F:\Eigene Dateien\Mediator 8.0 Pro\HP IBS\Hilfsdateien\Codeschnipsel2.txt" ein.
und
Wenn in der Datei "impressum.htm" der String "</body>" NICHT steht, jedoch der String "</html>" dann füge in der Zeile VOR dem Wort auch den Inhalt der Datei
"F:\Eigene Dateien\Mediator 8.0 Pro\HP IBS\Hilfsdateien\Codeschnipsel2.txt" ein.
Danach die Datei speichern und die nächste Datei bearbeiten.
Danach den upload starten. (Ab hier gehts wieder)
ftp -s:dateien_per_ftp_senden.ftp ( Den Inhalt der Datei "dateien_per_ftp_senden.ftp" habe ich dank Eurer Hilfe bereits fertig.)
Vielen Dank, wenn mir jemand helfen kann
Gruß Harald
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 142129
Url: https://administrator.de/contentid/142129
Ausgedruckt am: 22.11.2024 um 07:11 Uhr
24 Kommentare
Neuester Kommentar
naja, die meisten guten programme habe eine sogenannte stapelverarbeitung,
das heißt es wird nur an einer datei aufgenommen, welche arbeitschritte zu machen sind, was wo
eingefügt, entfernt gelöscht ... wird(also alle funktionen die das programm hat),
und das ganze als befehlssatz gespeichert. dann wählt man nur noch aus, mit welchen dateien das passieren soll,
und schon erledigt das programm deine gesammte handarbeit.
mkrasselt1
PS: Ich hab jetzt zwar keine zeit zum googln, aber ich weiß, das es solche programme gibt.
das heißt es wird nur an einer datei aufgenommen, welche arbeitschritte zu machen sind, was wo
eingefügt, entfernt gelöscht ... wird(also alle funktionen die das programm hat),
und das ganze als befehlssatz gespeichert. dann wählt man nur noch aus, mit welchen dateien das passieren soll,
und schon erledigt das programm deine gesammte handarbeit.
mkrasselt1
PS: Ich hab jetzt zwar keine zeit zum googln, aber ich weiß, das es solche programme gibt.
Hallo (und) GutenMorgen,
auch ich bin noch ziemlicher Batch-Neuling und bin auch fasziniert von dieser Seite.
Zum Thema:
ich kann dir jetzt nicht direkt einen Code liefern. Aber das erste Problem wird erstmal sein, dass du den Text zwischen anderen Text schreiben willst.
Ich hab mal weng gesucht und bin auf diesen Thread hier gestoßen, vllt hilft er dir ja weiter.
Batch - Textzeile vor bestimmten Zeichen einfügen
Gruß Bankaifan
auch ich bin noch ziemlicher Batch-Neuling und bin auch fasziniert von dieser Seite.
Zum Thema:
ich kann dir jetzt nicht direkt einen Code liefern. Aber das erste Problem wird erstmal sein, dass du den Text zwischen anderen Text schreiben willst.
Ich hab mal weng gesucht und bin auf diesen Thread hier gestoßen, vllt hilft er dir ja weiter.
Batch - Textzeile vor bestimmten Zeichen einfügen
Gruß Bankaifan
Hallo GutenMorgen
und willkommen im Forum!
hier meine Lösung in vbs
ersetzen.vbs
Zerst mal mit kopierten htm-Dateien probieren - würde ich empfehlen. Konnte Funktion des Codes nicht testen, sollte aber passen...
Über positive Rückmeldung freue ich mich immer
lg
Edi
edit:
in verbindung mit deiner ftp-batch , musst Du in diese bat folgenden Code VOR deinem Code einfügen:
und willkommen im Forum!
hier meine Lösung in vbs
ersetzen.vbs
function louis(pfad)
zaehler = 0
zaehler1 = 0
datei1= "F:\Eigene Dateien\Mediator 8.0 Pro\HP IBS\Hilfsdateien\Codeschnipsel1.txt"
datei2= "F:\Eigene Dateien\Mediator 8.0 Pro\HP IBS\Hilfsdateien\Codeschnipsel2.txt"
Set fs = CreateObject("Scripting.FileSystemObject")
Set File1 = fs.OpenTextFile(datei1 , 1, true)
codeschnipsel1 = file1.ReadAll
Set File2 = fs.OpenTextFile(datei2 , 1, true)
codeschnipsel2 = file2.ReadAll
Set Folder = fs.GetFolder(pfad)
Set Files = Folder.Files
For Each File in Files
zaehler = zaehler+1
aenderung = 0
'wscript.echo file
if instr(file,"htm")>= 1 then
Set datei = fs.OpenTextFile(file , 1, true)
If datei.AtEndOfStream Then
inhalt = ""
Else
inhalt = datei.ReadAll
end if
if instr(1,inhalt,"Austausch ABC",1) >= 1 then
inhalt = replace(inhalt,"Austausch ABC",codeschnipsel1)
aenderung = 1
end if
if instr(1,inhalt,"</body>",1) >= 1 then
inhalt = replace(inhalt,"</body>",codeschnipsel2 & "</body>")
aenderung = 1
end if
if (instr(1,inhalt,"</body>",1) = 0 AND instr(1,inhalt,"</html>",1) >= 1) then
inhalt = replace(inhalt,"</html>",codeschnipsel2 & "</html>")
aenderung = 1
end if
wscript.echo inhalt
Set datei = nothing
if aenderung = 1 then
zaehler1 = zaehler1 +1
set dateineu = fs.createtextfile(file, true)
dateineu.write inhalt
set dateineu = nothing
end if
End If
Next
wscript.echo zaehler & " Dateien gefunden, davon " & zaehler1 & " bearbeitet"
end function
call louis("F:\Eigene Dateien\Mediator 8.0 Pro\HP IBS\HTML")
Zerst mal mit kopierten htm-Dateien probieren - würde ich empfehlen. Konnte Funktion des Codes nicht testen, sollte aber passen...
Über positive Rückmeldung freue ich mich immer
lg
Edi
edit:
in verbindung mit deiner ftp-batch , musst Du in diese bat folgenden Code VOR deinem Code einfügen:
wscript ersetzen.vbs
Hallo GutenMorgen!
Freut mich, dass Du mir so ausgelassen für meine Hilfe dankst!!!
Das ist echt das Salz der Erde
Viel Spaß noch weiterhin und: bleib so, wie du bist!!!
Gern geschehen!
Ich geh jetzt ins Wochenende und werde es dazu nützen, darüber zu sinnieren, warum ich Schnösel mit Krawatten immer in diese Blender- und Unsympathlerschublade stecke..
hmmmmm.....
Edi
Freut mich, dass Du mir so ausgelassen für meine Hilfe dankst!!!
Das ist echt das Salz der Erde
Viel Spaß noch weiterhin und: bleib so, wie du bist!!!
Gern geschehen!
Ich geh jetzt ins Wochenende und werde es dazu nützen, darüber zu sinnieren, warum ich Schnösel mit Krawatten immer in diese Blender- und Unsympathlerschublade stecke..
hmmmmm.....
Edi
Hallo Harald!
Ich sehe, Du hast Humor und bist nicht angek... wegen meiner Motzerei!
Nix für ungut!
Freilich kannst du jederzeit Fragen zum Code stellen, ich werde mich um rasche Antworten bemühen!
btw: da muss ich eine gute Stunde gehabt haben, dass der Code ohne einen Test wirklich fehlerfrei entstanden ist...
bis zum nächsten Mal
lg und erholsames WE
Edi
[edit: als kurzes Geleit zum Verstehen des Codes: die Funktion instr liefert die Stelle, an der das gesuchte Zeichen/der String zum erstenmal vorkommt. DH, wenn das Ergebnis 0 ist, kommt der Suchbegriff gar nicht vor...; die 1 zu Beginn gibt den Suchbeginn vor (aber der 1. STelle wird gesucht), die letzte 1 gibt an, dass ein Textvergleich druchgeführt wird, wodurch Groß- und Kleinschreibung ignoriert wird... -- an letzter Stelle eine 0 würde einen Binärvergleich machen, wodurch Casesensitiv entsteht...]
Ich sehe, Du hast Humor und bist nicht angek... wegen meiner Motzerei!
Nix für ungut!
Freilich kannst du jederzeit Fragen zum Code stellen, ich werde mich um rasche Antworten bemühen!
btw: da muss ich eine gute Stunde gehabt haben, dass der Code ohne einen Test wirklich fehlerfrei entstanden ist...
bis zum nächsten Mal
lg und erholsames WE
Edi
[edit: als kurzes Geleit zum Verstehen des Codes: die Funktion instr liefert die Stelle, an der das gesuchte Zeichen/der String zum erstenmal vorkommt. DH, wenn das Ergebnis 0 ist, kommt der Suchbegriff gar nicht vor...; die 1 zu Beginn gibt den Suchbeginn vor (aber der 1. STelle wird gesucht), die letzte 1 gibt an, dass ein Textvergleich druchgeführt wird, wodurch Groß- und Kleinschreibung ignoriert wird... -- an letzter Stelle eine 0 würde einen Binärvergleich machen, wodurch Casesensitiv entsteht...]
lol...ist ja echt interessant geworden die Unterhaltung hier. Aber freut mich dass ihr euch wieder einig seit, sonst hätt ich hier ggf mal ein wörtchen mit euch gesprochen :D wenn die zeit gekommen ist werde ich mich auch mit vbs und shell beschäftige, im moment lebe ich für batch :D
Also auch von mir ein wunderschönes WE euch beiden...
"Hey Hey Wickie, hey Wickie..." *sing*
Also auch von mir ein wunderschönes WE euch beiden...
"Hey Hey Wickie, hey Wickie..." *sing*
Hallo Harald!
Bin trotz Wochenende und Gelübde, die Kiste in der Freizeit nicht anzugreifen doch noch kurz online (vor allem wegen dieser Parallelwelt, in der die Edis fragen und die Haralds antworten )
Naja, und weil ich jetzt das Gelübde schon gebrochen habe noch ein paar Tipps:
Das Tool läuft - kurz gesagt - so ab:
zeile 1: definition des namens der funktion (bei uns louis - der name, der mir als erstes eingefallen ist...)
In Zeile 11 u 14 lese ich den Inhalt der zuvor definierten Datei ein und weise den Inhalt den beiden Variablen schnipsel1 u 2 zu
zeile 20: schleifenbeginn (for each file)
zeile 24: damit das tool sich nur um htm dateien kümmert, schaue ich nach, ob der dateiname die zeichen "htm" enthält.
zeile 29: der inhalt der htm wird gelesen
zeile 31: wenn ABC... vorkommt (dh, Position des 1. Vorkommens ist größergleich 1), dann zeile 32: Austausch von ABC gegen den Inhalt der Variable aus zeile 11
zeile 32: variable änderung wird auf 1 gesetzt
gleiches passiert dann mit den anderen änderungen, die mit dem wörtchen AND verbunden sind, damit beide erfüllt sein müssen
gleiches? eigentlich ähnliches, da
inhalt = replace(inhalt,"</body>",codeschnipsel2 & "</body>") dazu führt, dass
</body> ersetzt wird durch den inhalt von schnipsel2 und </body> (da du ja wolltest, dass der inhalt VOR den body-tag gesetzt wird)
zeile 47 die Datei wird geschlossen (weil sie ja nur zum lesen geöffnet wurde... und jetzt wollen wir schreiben (wenn es etwas auszutauschen gibt).
zeile 49: wenn wir etwas ändern wollen (weil oben der wert der variable aenderung auf 1 gesetzt wurde)
zeile 51: wir schreiben die betreffende datei komplett neu (true gibt an, dass sie überschrieben wird, falls vorhanden...)
52: die variable inhalt enthält ja den bereits geänderten Inahlt, daher schreiben wir diese in die entsprechende Datei
53: datei schliessen
57: next lässt und wieder in zeile 20 springen für die nächste datei
und damit er beim nächsten durchlauf wieder nachschaut, ob wir wirklich etwas ändern wollen, wird der wert der variable aenderung auch in zeile 20 wieder auf 0 gesetzt.
die beiden zaehler sind nur ein Gag, die kannst du auch ersatzlos rauswerfen...
(da zaehler1 nur erhöht wird, wenn die variable aenderung beim jeweiligen druchlauf (= bei der gerade geöffneten datei mit der endung htm) auf 1 gesetzt wurde, der andere zaehler jedoch bei jeder datei erhöht wird, haben wir 2 werte...)
58: einfach nur eine ausgabe, kann gestrichen werden oder durch ein hochkomma (wie in zeile 23) vorübergehend auskommentiert werden
zeile 61: die funktion namens louis wird mit dem Pfad aufgerufen, in dem die dateien stecken...
lg
erholsames wochenende
edi
[Zitat]
so etwas wie ein alterweiser Mentor...
[/Zitat]
naja, wenn das TVMOVIE so sagt, dann wirds schon stimmen
Bin trotz Wochenende und Gelübde, die Kiste in der Freizeit nicht anzugreifen doch noch kurz online (vor allem wegen dieser Parallelwelt, in der die Edis fragen und die Haralds antworten )
Naja, und weil ich jetzt das Gelübde schon gebrochen habe noch ein paar Tipps:
Das Tool läuft - kurz gesagt - so ab:
zeile 1: definition des namens der funktion (bei uns louis - der name, der mir als erstes eingefallen ist...)
In Zeile 11 u 14 lese ich den Inhalt der zuvor definierten Datei ein und weise den Inhalt den beiden Variablen schnipsel1 u 2 zu
zeile 20: schleifenbeginn (for each file)
zeile 24: damit das tool sich nur um htm dateien kümmert, schaue ich nach, ob der dateiname die zeichen "htm" enthält.
zeile 29: der inhalt der htm wird gelesen
zeile 31: wenn ABC... vorkommt (dh, Position des 1. Vorkommens ist größergleich 1), dann zeile 32: Austausch von ABC gegen den Inhalt der Variable aus zeile 11
zeile 32: variable änderung wird auf 1 gesetzt
gleiches passiert dann mit den anderen änderungen, die mit dem wörtchen AND verbunden sind, damit beide erfüllt sein müssen
gleiches? eigentlich ähnliches, da
inhalt = replace(inhalt,"</body>",codeschnipsel2 & "</body>") dazu führt, dass
</body> ersetzt wird durch den inhalt von schnipsel2 und </body> (da du ja wolltest, dass der inhalt VOR den body-tag gesetzt wird)
zeile 47 die Datei wird geschlossen (weil sie ja nur zum lesen geöffnet wurde... und jetzt wollen wir schreiben (wenn es etwas auszutauschen gibt).
zeile 49: wenn wir etwas ändern wollen (weil oben der wert der variable aenderung auf 1 gesetzt wurde)
zeile 51: wir schreiben die betreffende datei komplett neu (true gibt an, dass sie überschrieben wird, falls vorhanden...)
52: die variable inhalt enthält ja den bereits geänderten Inahlt, daher schreiben wir diese in die entsprechende Datei
53: datei schliessen
57: next lässt und wieder in zeile 20 springen für die nächste datei
und damit er beim nächsten durchlauf wieder nachschaut, ob wir wirklich etwas ändern wollen, wird der wert der variable aenderung auch in zeile 20 wieder auf 0 gesetzt.
die beiden zaehler sind nur ein Gag, die kannst du auch ersatzlos rauswerfen...
(da zaehler1 nur erhöht wird, wenn die variable aenderung beim jeweiligen druchlauf (= bei der gerade geöffneten datei mit der endung htm) auf 1 gesetzt wurde, der andere zaehler jedoch bei jeder datei erhöht wird, haben wir 2 werte...)
58: einfach nur eine ausgabe, kann gestrichen werden oder durch ein hochkomma (wie in zeile 23) vorübergehend auskommentiert werden
zeile 61: die funktion namens louis wird mit dem Pfad aufgerufen, in dem die dateien stecken...
lg
erholsames wochenende
edi
[Zitat]
so etwas wie ein alterweiser Mentor...
[/Zitat]
naja, wenn das TVMOVIE so sagt, dann wirds schon stimmen
Hallo Harald!
Auto läuft respektive fährt wieder, kann mich nun also wieder Deines Problems annehmen - sofern nötig.
noch ein Tipp:
Syntax replace:
replace(worin_gesucht_werden_soll, was_gesucht_werden_soll, wodurch_ersetzt_werden_soll)
Bsp: replace("Citroen baut wundervolle Autos", "wundervoll", "spannend") ergibt Citroen baut spannende Autos
daher
replace("Citroen baut wundervolle Autos", "wundervoll", "wundervoll spannend") ergibt Citroen baut wundervoll spannende Autos
lg
Auto läuft respektive fährt wieder, kann mich nun also wieder Deines Problems annehmen - sofern nötig.
noch ein Tipp:
Syntax replace:
replace(worin_gesucht_werden_soll, was_gesucht_werden_soll, wodurch_ersetzt_werden_soll)
Bsp: replace("Citroen baut wundervolle Autos", "wundervoll", "spannend") ergibt Citroen baut spannende Autos
daher
replace("Citroen baut wundervolle Autos", "wundervoll", "wundervoll spannend") ergibt Citroen baut wundervoll spannende Autos
lg
Hallo!
hier wird etwas Licht in die Verwendung der Anfürhungszeichenproblematik gebracht...
dh für dich:
Annahme, du willst folgenden String gegen codeschnipsel1 austauschen...
<FRAME name="main" scrolling="no" noresize src="" target="_self">
die Lösung:
Tipp:
lass Dir obige Zeichen mal wie folgt ausgeben:
test.vbs
Falls das Ergebnis so aussieht, wie du es möchtest, kannst du dann die Variable temp in Deinen code einbauen
gutes gelingen
lg
Edi
hier wird etwas Licht in die Verwendung der Anfürhungszeichenproblematik gebracht...
dh für dich:
Annahme, du willst folgenden String gegen codeschnipsel1 austauschen...
<FRAME name="main" scrolling="no" noresize src="" target="_self">
die Lösung:
temp= "<FRAME name= ""main "" scrolling= ""no "" noresize src= """" target= ""_self "">"
if instr(1,inhalt,temp,1) >= 1 then
inhalt = replace(inhalt,temp,codeschnipsel1)
end if
Tipp:
lass Dir obige Zeichen mal wie folgt ausgeben:
test.vbs
temp= "<FRAME name= ""main "" scrolling= ""no "" noresize src= """" target= ""_self "">"
wscript.echo temp
gutes gelingen
lg
Edi