xtrollra
Goto Top

Links in Textdatei kopieren

Hallo Leute,
Ich habe eine Textdatei (HTML-Format), die viele Downloadlinks enthält. Name der Datei: dlinks.html

Jetzt möchte ich, dass alle Links in dieser Datei, die die folgenden Bedingungen erfüllen, Zeilenweise in eine neue Textdatei (newlinks.txt) kopiert/geschrieben wird:

Bedingungen:
-beginnt mit http://
-enthält das Wort Photoma
-endet mit .jpg

Ich habe bereits mit findstr probiert, aber da funktionieren die Platzhalter * nicht...

Mein Ansatz:

for /f %%i in ('findstr /c:"*http://*Photoma*.jpg*" dlinks.html') do (echo "%%i">>newlinks.txt)


funktioniert jedoch leider nicht face-sad


Könnt ihr mir helfen?
Vielen Dank für eure Hilfe.

Content-ID: 205966

Url: https://administrator.de/forum/links-in-textdatei-kopieren-205966.html

Ausgedruckt am: 05.04.2025 um 23:04 Uhr

bastla
bastla 02.05.2013 aktualisiert um 22:28:20 Uhr
Goto Top
Hallo xtrollra und willkommen im Forum!
Ich habe bereits mit findstr probiert, aber da funktionieren die Platzhalter * nicht...
... vor allem, weil "*" kein Platzhalter ist face-wink - kannst Du der Onlinehilfe (aufzurufen mit findstr /?) entnehmen ...

Abgesehen davon kann "findstr" nur zeilenweise verarbeiten - besteht denn Deine Datei aus lauter Zeilen mit je einem Link?

Grüße
bastla
xtrollra
xtrollra 02.05.2013 um 23:05:42 Uhr
Goto Top
hallo Bastla,
nein, die Datei ist eine HTML-Datei...also HTML-Code mit vielen Zeilen.
Irgendwo gibt es einen Link zu einer Datei und genau diesen Link will ich quasi herauskopieren und in eine Datei schreiben.
Endoro
Endoro 02.05.2013 um 23:15:57 Uhr
Goto Top
Hallo xtrollra,

ohne mehr Infos zur "dlinks.html" kann man so nix sagen.

Gruss!
bastla
bastla 02.05.2013, aktualisiert am 03.05.2013 um 00:12:02 Uhr
Goto Top
... aber es ganz schematisch mit einem VBScript der Art
Ein = "D:\dlinks.html"  
Aus = "D:\newlinks.txt"  

Set fso = CreateObject("Scripting.FileSystemObject")  
T = fso.OpenTextFile(Ein).ReadAll

Set rE = New RegExp
rE.Pattern = "http://.*Photoma.*\.jpg"  
rE.Global = True
rE.IgnoreCase = True

For Each Match In rE.Execute(T)
    Liste = Liste & vbCrLf & Match
Next
fso.CreateTextFile(Aus).Write Mid(Liste, 3)
versuchen ...

Grüße
bastla
xtrollra
xtrollra 03.05.2013 um 00:01:50 Uhr
Goto Top
jaaa, mega vielen Dank bastla face-smile))
Funktioniert genau wie ich es haben will. Klasse.
Geht das ganze auch rein per Batch? also ohne vbs?


@Endoro
Hintergrund ist, dass ich mit einer Batchdatei Updatedateien für ein Programm mit einem Klick downloaden möchte.

Der Downloadlink zu dieser Datei ändert sich aber logischerweise ständig, wenn neue Versionen verfügbar sind. D.h. der Dateiname auf dem Server ändert sich und damit auch der Link dazu.

Deshalb lasse ich per Batch die HTML-Datei zuerst herunterladen, um dann diese zu "verarbeiten" und den Link darin rausfischen...
Hoffe das ist verständlich ;)
bastla
bastla 03.05.2013 um 00:11:44 Uhr
Goto Top
Hallo xtrollra!
Geht das ganze auch rein per Batch? also ohne vbs?
Grundsätzlich möglich, aber mühsam - zur Not lässt sich das VBScript aber durch einen Batch erzeugen und ausführen, etwa so:
set "Ein=D:\dlinks.html"  
set "Aus=D:\newlinks.txt"  

set "G=%temp%\GetLinks.vbs"  
 >"%G%" echo Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile("%Ein%").ReadAll  
>>"%G%" echo Set rE=New RegExp:rE.Pattern="http://.*Photoma.*\.jpg":rE.Global=True:rE.IgnoreCase=True  
>>"%G%" echo For Each Match In rE.Execute(T):Liste=Liste^&vbCrLf^&Match:Next:fso.CreateTextFile("%Aus%").Write Mid(Liste,3)  

cscript //nologo "%G%" 
Grüße
bastla
Endoro
Endoro 03.05.2013 um 07:40:03 Uhr
Goto Top
Zitat von @xtrollra:
Geht das ganze auch rein per Batch? also ohne vbs?


Sicher nicht ohne mehr Info face-smile

Gruss!
micneu
micneu 04.05.2013 um 11:23:37 Uhr
Goto Top
ich könnte dir eine lösung in powershell anbieten. oder in awk, perl.
bastla
bastla 04.05.2013 um 11:32:30 Uhr
Goto Top
@ micneu
awk, perl
Wenn's noch nicht einmal VBS sein soll? face-wink

Grüße
bastla
xtrollra
xtrollra 04.05.2013 um 17:29:36 Uhr
Goto Top
@micneu
vielen Dank für deine Hilfe, aber mit bastla's VBS-Skript funktionierts super.

ich habe aber noch ein Problem, für das ich noch keine gute Lösung gefunden habe:
Die Batch soll die 3. Zeile (oder x-te) einer Textdatei als Variable speichern.

for /f "tokens=* delims= " %%a in (Datei.txt) do (  
	set /a N+=1
	set v!N!=%%a
	set vLineThree=!v3!
	)
Leider durchläuft dieser Code unnötig jede Zeile der ganzen Textdatei, was Zeit usw. kostet.
Ist es möglich gezielt einfach die x. Zeile auszulesen?
Danke für Eure Hilfe
bastla
bastla 04.05.2013 aktualisiert um 17:43:13 Uhr
Goto Top
Hallo xtrollra!

Etwa so:
set "Line=3"  
for /f "tokens=1* delims=]" %%i in ('find /n /v "§§§§§§"^<Datei.txt^|findstr /b "\[%Line%\]"') do set "vLineThree=%%j"  
if not defined vLineThree echo Zeile %Line% leer oder nicht vorhanden!
- oder natürlich per VBS ... face-wink

Grüße
bastla