Mit Batch htm-datei auslesen string suchen und darunter Inhalt einer TXT Datei einfügen
Hallo,
ich möchte eine *.Htm Datei mit Hilfe einer Batch durchsuchen lassen nach einem String z.B. <hier> und nach diesem String soll dann der inhalt einer Textdatei eingefügt werden z.B. 123 hier ein Beispiel:
test.htm
und in der test2.txt steht
nach dem Batchdurchlauf soll die neue test.htm folgendermaßen aussehen:
Ich schaffe es normale Dateien zu durchsuchen aber leider hängt es bei den ganzen html befehlen, leider kam ich auch mit ähnlichen Lösungen nicht weiter!
Normale Dateien kann ich mit folgendem Befehlen durchsuchen, klappt auch einwandfrei - ich weiß, da HTML Codes durchsucht werden sollen, etwas verändert werden muss und die < und > besonders maskiert werden müssen.. aber ich komme nicht weiter..
Kann mir bitte jemand helfen!
Danke und viel grüße!
ich möchte eine *.Htm Datei mit Hilfe einer Batch durchsuchen lassen nach einem String z.B. <hier> und nach diesem String soll dann der inhalt einer Textdatei eingefügt werden z.B. 123 hier ein Beispiel:
test.htm
html befehle usw
bla
blaaaa
<hier>
noch mehr html befehle
und
so
weiter
und in der test2.txt steht
123
html befehle usw
bla
blaaaa
<hier>
123
noch mehr html befehle
und
so
weiter
Ich schaffe es normale Dateien zu durchsuchen aber leider hängt es bei den ganzen html befehlen, leider kam ich auch mit ähnlichen Lösungen nicht weiter!
Normale Dateien kann ich mit folgendem Befehlen durchsuchen, klappt auch einwandfrei - ich weiß, da HTML Codes durchsucht werden sollen, etwas verändert werden muss und die < und > besonders maskiert werden müssen.. aber ich komme nicht weiter..
@echo off & Setlocal
set "Nach=abc"
set "Datei=txt2.txt"
set "DateiTmp=Textfile.tmp"
move "%Datei%" "%DateiTmp%"
for /f "delims=" %%i in (%DateiTmp%) do (
>>"%Datei%" echo %%i
echo %%i|findstr /b "%Nach%">nul && >> echo more txt1.txt >> "%Datei%"
)
pause
Kann mir bitte jemand helfen!
Danke und viel grüße!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 161729
Url: https://administrator.de/forum/mit-batch-htm-datei-auslesen-string-suchen-und-darunter-inhalt-einer-txt-datei-einfuegen-161729.html
Ausgedruckt am: 23.04.2025 um 10:04 Uhr
15 Kommentare
Neuester Kommentar
Hallo @fliop1 und willkommen auf Administrator.de,
wärst du bitte so freundlich und formatierst deinen Code ?
Dann ist deine Frage schonmal wesentlich einfacher zu lesen und die User zeigen sich hilfsbereiter. Inwiefern hast du es denn bisher geschafft, normale Dateien zu durchsuchen?
Mit welchem Befehl/Programm hast du das gemacht bzw. wie sieht die Schleife dazu aus?
Wenn es nur um das massenweise ändern geht, dann wäre evtl. auch Notepad++ für deine Aufgabe zu empfehlen. Hier müsstest du alle fraglichen Dateien öffnen und die Suchen&Ersetzen-Funktion auf den gesuchten Wert loslassen. Als Austauschstring gibst du deinen Suchstring + den Inhalt von 123 an.
Geht dein Suchtext und/oder dein Einfügetext über mehrere Zeilen, so müsstest du dir noch die Regeln zu regulären Ausdrücken innerhalb des NP++ anschauen.
Gruß
Snow
wärst du bitte so freundlich und formatierst deinen Code ?
Dann ist deine Frage schonmal wesentlich einfacher zu lesen und die User zeigen sich hilfsbereiter. Inwiefern hast du es denn bisher geschafft, normale Dateien zu durchsuchen?
Mit welchem Befehl/Programm hast du das gemacht bzw. wie sieht die Schleife dazu aus?
Wenn es nur um das massenweise ändern geht, dann wäre evtl. auch Notepad++ für deine Aufgabe zu empfehlen. Hier müsstest du alle fraglichen Dateien öffnen und die Suchen&Ersetzen-Funktion auf den gesuchten Wert loslassen. Als Austauschstring gibst du deinen Suchstring + den Inhalt von 123 an.
Geht dein Suchtext und/oder dein Einfügetext über mehrere Zeilen, so müsstest du dir noch die Regeln zu regulären Ausdrücken innerhalb des NP++ anschauen.
Gruß
Snow
Da du nach einem Batchscript fragst und es um Emailsignaturen geht, vermute ich mal, dass ihr Outlook verwendet?
Dafür gibt es ein tolles Tool von zerbIT, gennant OutlookSignature.
Die Software ist Freeware und ermöglicht eine zentrale Verwaltung von Signaturen mit verschiedensten Outlook-Versionen.
Tut mir leid, falls du eine Batch-antwort erwartet hättest, aber ich empfehle lieber Sachen mit Hand und Fuß anstatt einmalige Lösungen.
Gruß
Snow
Dafür gibt es ein tolles Tool von zerbIT, gennant OutlookSignature.
Die Software ist Freeware und ermöglicht eine zentrale Verwaltung von Signaturen mit verschiedensten Outlook-Versionen.
Tut mir leid, falls du eine Batch-antwort erwartet hättest, aber ich empfehle lieber Sachen mit Hand und Fuß anstatt einmalige Lösungen.
Gruß
Snow
Na wenn das so ist, gibt es schon einige Fragen zu diesem Thema. z.B. hier: Batch Problem, Suchen und Ersetzen in einer ini-Datei
Hallo fliop1 und willkommen im Forum!
Für die Bearbeitung einer HTML-Datei würde ich ja eigentlich reflexartig zu VBS greifen, aber da Du nun schon einen Batch suchst, etwa so:
Grüße
bastla
Für die Bearbeitung einer HTML-Datei würde ich ja eigentlich reflexartig zu VBS greifen, aber da Du nun schon einen Batch suchst, etwa so:
@echo off & setlocal
set "Nach=<hier>"
set "Datei=txt2.txt"
set "DateiEinf=txt1.txt"
set "DateiTmp=Textfile.tmp"
move "%Datei%" "%DateiTmp%"
for /f "usebackq delims=" %%i in ("%DateiTmp%") do set "Zeile=%%i" & call :ProcessLine
pause
goto :eof
:ProcessLine
setlocal enabledelayedexpansion
>>"%Datei%" echo !Zeile!
echo "!Zeile!"|findstr /b /L """%Nach%">nul && type "%DateiEinf%">>"%Datei%"
endlocal
goto :eof
bastla
@Snowman
Soferne es nicht unbedingt eine Suche am Zeilenanfang (also mit "/b") sein muss, könnte eigentlich
(als Ersatz der Zeile 15) funktionieren ... [Edit] wird's doch nicht tun
[/Edit]
Grüße
bastla
Du musst die Anführungszeichen und möglicherweise auch die UND-Zeichen maskieren.
Nicht in einem Suchstring ...Soferne es nicht unbedingt eine Suche am Zeilenanfang (also mit "/b") sein muss, könnte eigentlich
echo "!Zeile!"|findstr /L "%Nach%">nul && type "%DateiEinf%">>"%Datei%"
Grüße
bastla
@Snowman
Anführungszeichen kannst Du nicht maskieren, sondern bestenfalls verdoppeln ...
... aber bevor sich das Ganze noch mehr in die Länge zieht, lieber gleich die VBS-Ausführung:
Wenn die zu bearbeitende Datei per Kommandozeilenparameter - also etwa aus einem Batch mit:
oder per Drag & Drop übergeben werden soll, die Zeile 1 durch
ersetzen.
Grüße
bastla
[Edit] VBS-Version durch andere Variante ersetzt [/Edit]
Anführungszeichen kannst Du nicht maskieren, sondern bestenfalls verdoppeln ...
... aber bevor sich das Ganze noch mehr in die Länge zieht, lieber gleich die VBS-Ausführung:
Datei = "txt2.txt"
DateiEin = "txt1.txt"
Nach = "<td class=""inner""> Germany</td>"
LNach = Len(Nach)
Set fso = CreateObject("Scripting.FileSystemObject")
Ein = fso.OpenTextFile(DateiEin).ReadAll
Inhalt = Split(fso.OpenTextFile(Datei).ReadAll, vbCrLf)
For i = 0 To UBound(Inhalt)
If Left(Inhalt(i), LNach) = Nach Then Inhalt(i) = Inhalt(i) & vbCrLf & Ein
Next
fso.CreateTextFile(Datei).Write Join(Inhalt, vbCrLf)
cscript //nologo "C:\Utils\SigEinf.vbs" "D:\txt2.txt"
If WScript.Arguments.Count = 0 Then
WScript.Echo "Bitte zu bearbeitende Datei als Parameter übergeben!"
WScript.Quit 1
End If
Datei = WScript.Arguments(0)
Grüße
bastla
[Edit] VBS-Version durch andere Variante ersetzt [/Edit]
moin zusammen,
Die zu dursuchenden Zeilen mit Findstr in der Forschleife habe ich öfter mittels Temporären Script gemacht, da so die Ausgabe dieses Scriptes vom Findstr verarbeitet wird.
dabei ist es unerheblich ob in dieser Zeile SonderZeichen oder eine Ungerade Anzahl Anführungszeichen enthalten sind.
Gruß Phil
Die zu dursuchenden Zeilen mit Findstr in der Forschleife habe ich öfter mittels Temporären Script gemacht, da so die Ausgabe dieses Scriptes vom Findstr verarbeitet wird.
dabei ist es unerheblich ob in dieser Zeile SonderZeichen oder eine Ungerade Anzahl Anführungszeichen enthalten sind.
@echo off & setlocal disabledelayedexpansion
set "Nach=<hier>"
set "Datei=txt2.txt"
set "DateiEinf=txt1.txt"
set "DateiTmp=Textfile.tmp"
>"%temp%\Line.cmd" echo @echo off ^& setlocal enabledelayedexpansion
>>"%temp%\Line.cmd" echo echo.!Zeile!
>>"%temp%\Line.cmd" echo endlocal
move "%Datei%" "%DateiTmp%"
for /f "usebackq delims=" %%i in ("%DateiTmp%") do set "Zeile=%%i" & call :ProcessLine
del "%temp%\Line.cmd"
pause
goto :eof
:ProcessLine
setlocal enabledelayedexpansion
>>"%Datei%" echo !Zeile!
"%temp%\Line.cmd"|findstr /b /L "%Nach%">nul && type "%DateiEinf%">>"%Datei%"
endlocal
goto :eof
Gruß Phil
@ph
[Edit] Das Problem ist nicht die Ausgabe der Zeile, sondern der Suchstring %Nach% ...
... leicht zu erkennen, wenn zB anstelle des richtigen
eine leicht abgewandelte Version verwendet wird:
Ersetzt wird nämlich auch dann ...
/Edit]
Grüße
bastla
[Edit] Das Problem ist nicht die Ausgabe der Zeile, sondern der Suchstring %Nach% ...
... leicht zu erkennen, wenn zB anstelle des richtigen
set "Nach=<td class="inner"> Germany</td>"
set "Nach=<td class="inner"> Germany2</td>"
/Edit]
Grüße
bastla
ist doch auch kein Problemchen.
da müsste doch /g:"Datei" Temporär auch gehen
auch genügen.
Gruß Phil
da müsste doch /g:"Datei" Temporär auch gehen
@echo off & setlocal disabledelayedexpansion
set "Nach=<hier>"
set "Datei=txt2.txt"
set "DateiEinf=txt1.txt"
set "DateiTmp=Textfile.tmp"
>"%temp%\Line.cmd" echo @echo off ^& setlocal enabledelayedexpansion
>>"%temp%\Line.cmd" echo echo.!Zeile!
>>"%temp%\Line.cmd" echo endlocal
setlocal enabledelayedexpansion
>"%temp%\Suchtext" echo !Nach!
endlocal
move "%Datei%" "%DateiTmp%"
for /f "usebackq delims=" %%i in ("%DateiTmp%") do set "Zeile=%%i" & call :ProcessLine
del "%temp%\Line.cmd"
pause
goto :eof
:ProcessLine
setlocal enabledelayedexpansion
>>"%Datei%" echo !Zeile!
"%temp%\Line.cmd"|findstr /b /g:"%temp%\Suchtext">nul && type "%DateiEinf%">>"%Datei%"
endlocal
goto :eof
auch genügen.
Gruß Phil
@ph
Yep - damit wär's dann wohl erschlagen ...
... wobei aber die eine Temporärdatei auch noch eingespart werden könnte:
Grüße
bastla
P.S.: Ohne Parameterprüfung wäre in diesem Fall aber mal die VBS-Variante kürzer ...
Yep - damit wär's dann wohl erschlagen ...
... wobei aber die eine Temporärdatei auch noch eingespart werden könnte:
@echo off & setlocal disabledelayedexpansion
set "Nach=<td class="inner"> Germany</td>"
set "Datei=txt2.txt"
set "DateiEinf=txt1.txt"
set "DateiTmp=Textfile.tmp"
setlocal enabledelayedexpansion
>"%temp%\Suchtext" echo "!Nach!
endlocal
move "%Datei%" "%DateiTmp%"
for /f "usebackq delims=" %%i in ("%DateiTmp%") do set "Zeile=%%i" & call :ProcessLine
pause
goto :eof
:ProcessLine
setlocal enabledelayedexpansion
>>"%Datei%" echo !Zeile!
echo "!Zeile!"|findstr /b /g:"%temp%\Suchtext">nul && type "%DateiEinf%">>"%Datei%"
endlocal
goto :eof
bastla
P.S.: Ohne Parameterprüfung wäre in diesem Fall aber mal die VBS-Variante kürzer ...