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

Mit Batch htm-datei auslesen string suchen und darunter Inhalt einer TXT Datei einfügen

Frage Entwicklung Batch & Shell

Mitglied: fliop1

fliop1 (Level 1) - Jetzt verbinden

28.02.2011, aktualisiert 16:03 Uhr, 4179 Aufrufe, 15 Kommentare

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

01.
html befehle usw 
02.
bla 
03.
blaaaa 
04.
<hier> 
05.
noch mehr html befehle  
06.
und 
07.
so 
08.
weiter
und in der test2.txt steht
01.
123
nach dem Batchdurchlauf soll die neue test.htm folgendermaßen aussehen:

01.
html befehle usw 
02.
bla 
03.
blaaaa 
04.
<hier> 
05.
123 
06.
noch mehr html befehle  
07.
und 
08.
so 
09.
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..

01.
@echo off & Setlocal 
02.
 
03.
set "Nach=abc" 
04.
set "Datei=txt2.txt" 
05.
set "DateiTmp=Textfile.tmp" 
06.
move "%Datei%" "%DateiTmp%"  
07.
for /f "delims=" %%i in (%DateiTmp%) do (  
08.
    >>"%Datei%" echo %%i 
09.
    echo %%i|findstr /b "%Nach%">nul && >> echo more txt1.txt >> "%Datei%" 
10.
11.
pause
Kann mir bitte jemand helfen!

Danke und viel grüße!
Mitglied: Snowman25
28.02.2011 um 15:40 Uhr
Hallo fliop1 und willkommen auf Administrator.de,

wärst du bitte so freundlich und formatierst deinen Code nach dieser Formatierungshilfe?
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
Bitte warten ..
Mitglied: fliop1
28.02.2011 um 16:07 Uhr
Habe es angepasst, Notepad kommt leider nicht in Frage, es geht darum bei vielen Leuten die Signatur von Mails zu ändern - und daher wäre es besser mit einem Doppelklick die Änderung durchzuführen! Der Inhalt des einzufügenden Textes ist mehrere Zeilen lang, daher dachte ich an move txt1.txt << txt2.htm an der gesuchten Stelle!
Bitte warten ..
Mitglied: Snowman25
28.02.2011 um 16:13 Uhr
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
Bitte warten ..
Mitglied: fliop1
28.02.2011 um 16:20 Uhr
Wir verwenden Lotus Notes Und es geht tatsächlich nur um eine einmalige Änderung daher wäre es sehr praktisch!
Bitte warten ..
Mitglied: Snowman25
28.02.2011 um 16:27 Uhr
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
Bitte warten ..
Mitglied: bastla
28.02.2011 um 16:31 Uhr
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:
01.
@echo off & setlocal 
02.
set "Nach=<hier>" 
03.
set "Datei=txt2.txt" 
04.
set "DateiEinf=txt1.txt" 
05.
 
06.
set "DateiTmp=Textfile.tmp" 
07.
move "%Datei%" "%DateiTmp%"  
08.
for /f "usebackq delims=" %%i in ("%DateiTmp%") do set "Zeile=%%i" & call :ProcessLine 
09.
pause 
10.
goto :eof 
11.
 
12.
:ProcessLine 
13.
setlocal enabledelayedexpansion 
14.
>>"%Datei%" echo !Zeile! 
15.
echo "!Zeile!"|findstr /b /L """%Nach%">nul && type "%DateiEinf%">>"%Datei%" 
16.
endlocal 
17.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: fliop1
28.02.2011 um 16:54 Uhr
01.
set "Nach=<td class="inner">&nbsp;Germany</td>"
Besteht auch die Möglichkeit hiernach zu suchen? Nach <hier> funktioniert perfekt.. aber sobald ich nach <td class="inner">&nbsp;Germany</td> ist es vorbei und es kommen Fehler..

Aber vielen vielen Dank schon mal! Beide Sachen waren schon mal sehr hilfreich! Ich probier gleichzeitig noch rum, vllt finde ich es ja auch selber noch raus ansonsten freu ich mich auf weiter Hilfe

Grüße
Bitte warten ..
Mitglied: Snowman25
28.02.2011 um 17:03 Uhr
Du musst die Anführungszeichen und möglicherweise auch die UND-Zeichen maskieren.
Also so:
set "Nach=<td class=^"inner^">^&nbsp;Germany</td>"
Gruß
Snow
Bitte warten ..
Mitglied: bastla
28.02.2011 um 17:06 Uhr
@Snowman
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%"
(als Ersatz der Zeile 15) funktionieren ... [Edit] wird's doch nicht tun [/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: Snowman25
28.02.2011 um 17:08 Uhr
Zitat von bastla:
@Snowman
> Du musst die Anführungszeichen und möglicherweise auch die UND-Zeichen maskieren.
Nicht in einem Suchstring ...

Also zumindest die Anführungszeichen muss er maskieren.
Bitte warten ..
Mitglied: bastla
28.02.2011 um 17:31 Uhr
@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:
01.
Datei = "txt2.txt" 
02.
DateiEin = "txt1.txt" 
03.
Nach = "<td class=""inner"">&nbsp;Germany</td>" 
04.
 
05.
LNach = Len(Nach) 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
Ein = fso.OpenTextFile(DateiEin).ReadAll 
08.
Inhalt = Split(fso.OpenTextFile(Datei).ReadAll, vbCrLf) 
09.
 
10.
For i = 0 To UBound(Inhalt) 
11.
    If Left(Inhalt(i), LNach) = Nach Then Inhalt(i) = Inhalt(i) & vbCrLf & Ein 
12.
Next 
13.
fso.CreateTextFile(Datei).Write Join(Inhalt, vbCrLf)
Wenn die zu bearbeitende Datei per Kommandozeilenparameter - also etwa aus einem Batch mit:
cscript //nologo "C:\Utils\SigEinf.vbs" "D:\txt2.txt"
oder per Drag & Drop übergeben werden soll, die Zeile 1 durch
01.
If WScript.Arguments.Count = 0 Then 
02.
    WScript.Echo "Bitte zu bearbeitende Datei als Parameter übergeben!" 
03.
    WScript.Quit 1 
04.
End If 
05.
Datei = WScript.Arguments(0)
ersetzen.

Grüße
bastla

[Edit] VBS-Version durch andere Variante ersetzt [/Edit]
Bitte warten ..
Mitglied: pieh-ejdsch
28.02.2011 um 21:04 Uhr
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.

01.
@echo off & setlocal disabledelayedexpansion 
02.
set "Nach=<hier>" 
03.
set "Datei=txt2.txt" 
04.
set "DateiEinf=txt1.txt" 
05.
 
06.
set "DateiTmp=Textfile.tmp" 
07.
 
08.
>"%temp%\Line.cmd" echo @echo off ^& setlocal enabledelayedexpansion 
09.
>>"%temp%\Line.cmd" echo echo.!Zeile! 
10.
>>"%temp%\Line.cmd" echo endlocal 
11.
 
12.
move "%Datei%" "%DateiTmp%" 
13.
for /f "usebackq delims=" %%i in ("%DateiTmp%") do set "Zeile=%%i" & call :ProcessLine 
14.
del "%temp%\Line.cmd" 
15.
pause 
16.
goto :eof 
17.
 
18.
:ProcessLine 
19.
setlocal enabledelayedexpansion 
20.
>>"%Datei%" echo !Zeile! 
21.
"%temp%\Line.cmd"|findstr /b /L "%Nach%">nul && type "%DateiEinf%">>"%Datei%" 
22.
endlocal 
23.
goto :eof
Gruß Phil
Bitte warten ..
Mitglied: bastla
28.02.2011 um 21:13 Uhr
@PH
[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">&nbsp;Germany</td>" 
eine leicht abgewandelte Version verwendet wird:
set "Nach=<td class="inner">&nbsp;Germany2</td>" 
Ersetzt wird nämlich auch dann ...
[]/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
28.02.2011 um 21:26 Uhr
ist doch auch kein Problemchen.

da müsste doch /g:"Datei" Temporär auch gehen

01.
@echo off & setlocal disabledelayedexpansion 
02.
set "Nach=<hier>" 
03.
set "Datei=txt2.txt" 
04.
set "DateiEinf=txt1.txt" 
05.
 
06.
set "DateiTmp=Textfile.tmp" 
07.
 
08.
>"%temp%\Line.cmd" echo @echo off ^& setlocal enabledelayedexpansion 
09.
>>"%temp%\Line.cmd" echo echo.!Zeile! 
10.
>>"%temp%\Line.cmd" echo endlocal 
11.
 
12.
setlocal enabledelayedexpansion 
13.
>"%temp%\Suchtext" echo !Nach! 
14.
endlocal 
15.
 
16.
move "%Datei%" "%DateiTmp%" 
17.
for /f "usebackq delims=" %%i in ("%DateiTmp%") do set "Zeile=%%i" & call :ProcessLine 
18.
del "%temp%\Line.cmd" 
19.
pause 
20.
goto :eof 
21.
 
22.
:ProcessLine 
23.
setlocal enabledelayedexpansion 
24.
>>"%Datei%" echo !Zeile! 
25.
"%temp%\Line.cmd"|findstr /b /g:"%temp%\Suchtext">nul && type "%DateiEinf%">>"%Datei%" 
26.
endlocal 
27.
goto :eof
auch genügen.

Gruß Phil
Bitte warten ..
Mitglied: bastla
28.02.2011 um 21:37 Uhr
@PH
Yep - damit wär's dann wohl erschlagen ...

... wobei aber die eine Temporärdatei auch noch eingespart werden könnte:
01.
@echo off & setlocal disabledelayedexpansion 
02.
set "Nach=<td class="inner">&nbsp;Germany</td>" 
03.
set "Datei=txt2.txt" 
04.
set "DateiEinf=txt1.txt" 
05.
 
06.
set "DateiTmp=Textfile.tmp" 
07.
 
08.
setlocal enabledelayedexpansion 
09.
>"%temp%\Suchtext" echo "!Nach! 
10.
endlocal 
11.
 
12.
move "%Datei%" "%DateiTmp%" 
13.
for /f "usebackq delims=" %%i in ("%DateiTmp%") do set "Zeile=%%i" & call :ProcessLine 
14.
pause 
15.
goto :eof 
16.
 
17.
:ProcessLine 
18.
setlocal enabledelayedexpansion 
19.
>>"%Datei%" echo !Zeile! 
20.
echo "!Zeile!"|findstr /b /g:"%temp%\Suchtext">nul && type "%DateiEinf%">>"%Datei%" 
21.
endlocal 
22.
goto :eof
Grüße
bastla

P.S.: Ohne Parameterprüfung wäre in diesem Fall aber mal die VBS-Variante kürzer ...
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
Per Batch ab einer bestimmten Stelle in einer .txt auslesen (1)

Frage von PeterPann zum Thema Batch & Shell ...

Batch & Shell
gelöst BATCH ini Datei Datei auslesen (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Batch & Shell
gelöst Ordner per Batch verschieben, Datei kopieren (2)

Frage von Shape.Shifter zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

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

Frage von Motte990 zum Thema Microsoft Office ...