seldolo
Goto Top

BatchScript um .url-Dateien auszulesen

Hallo allerseits,

ich versuche gerade ein Batch-Script zu schreben, das die Urls aus Verknüpfungen ausliest:

Es sollen alle *.url Dateien in dem Ordner, in dem die Batch-Datei sich befindet, durchsucht werden. Eine solche *.url-Datei sieht typischerweise wie folgt aus:
[DEFAULT]
BASEURL=http://hamster.volker-gringmuth.de/
[InternetShortcut]
URL=http://hamster.volker-gringmuth.de/
IDList=
IconFile=http://hamster.volker-gringmuth.de/favicon.ico
IconIndex=1
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2
Und aus dieser Datei möchte ich gerne die URL aus Zeile 4 extrahieren und in einer anderen TextDatei speichern.


Jetzt habe ich eine Batch-Datei geschrieben:
@echo off

REM alle Dateinamen in tmp-Datei:
dir /B *.url > _tmp_url.txt

REM Schleife über alle Dateien. 
for /F "usebackq tokens=*" %%a in (_tmp_url.txt)  do (  
    REM Schleife über alle Zeilen der Datei. Nur Zeile ausgeben, die mit URL= beginnt
    for /F "usebackq delims== tokens=1,2,*" %%i in ("%%a") do @(  
        if %%i equ URL (if %%k equ "" (echo %%j) else (echo %%j=%%k))  
        )
    ) >> alleUrls.txt

REM tmp-Datei löschen:
del _tmp_url.txt

Wahrscheinlich seht ihr, dass ich mit Batch-Scripten sehr unerfahren bin. Mein Problem liegt in Zeile 10:
Das Script benutzt immer den else-Zweig, in der if %%k equ "" (..) else (..) Konstellation. Auch wenn in der gesamten Zeile nur ein Gleichheitszeichen vorkommt:
URL=http://hamster.volker-gringmuth.de/
Dadurch ist mein Ergebnis falsch, welches da (im Augenblick) lautet:
http://hamster.volker-gringmuth.de/=

Wisst ihr, woran es liegt?
Ich bin natürlich auch für ander Lösungsansätze offen.

Vielen Dank im Voraus!

Content-Key: 158526

Url: https://administrator.de/contentid/158526

Printed on: April 24, 2024 at 19:04 o'clock

Member: bastla
bastla Jan 12, 2011 at 21:45:03 (UTC)
Goto Top
Hallo seldolo und willkommen im Forum!

Versuch es so (direkt in der CMD-Shell, als Batch mit jeweils %%i und %%j):
for /f "tokens=1* delims==" %i in ('findstr /b "URL=" *.url') do >>alleUrls.txt echo %j
Auch mit Deinem Ansatz ließe sich das lösen - allerdings hattest Du ein Token zuviel (es geht ja nur darum, die Teile vor und nach dem ersten "=" zu isolieren):
@echo off
REM Schleife über alle Dateien. 
for /F "tokens=*" %%a in ('dir /b *.url')  do (  
    REM Schleife über alle Zeilen der Datei. Nur Zeile ausgeben, die mit URL= beginnt
    for /F "usebackq tokens=1* delims==" %%i in ("%%a") do (  
        if "%%i" equ "URL" echo %%j  
    )
)>>alleUrls.txt
Grüße
bastla
Member: seldolo
seldolo Jan 13, 2011 at 00:20:37 (UTC)
Goto Top
Hallo bastla,

wow, ich bin begeistert!
Dein Einzeiler ist absolut super! Ich werde mich gleich einmal dran setzen, ihn nachzuvollziehen. Kenne findstr noch nicht.

Schon interessant, ich hatte natürlich auch versucht, es ohne temporäre Datei hinzubekommen (mit Hilfe von dem wirklich tollen Tutorial zur For-Schleife hier im Forum), doch es wollte und wollte nicht klappen. Deswegen bin ich ausgewichen auf die Lösung mit Datei.
Wenn ich jetzt deinen Code sehe sieht er auf den ersten Blick genau wie meine Skriptversuche aus; mit dem Unterschied:
deiner machts, bei mir krachts ...

Also vielen Dank!
Das ist wirklich klasse!