kristov
Goto Top

Dateinamen aus Datei auslesen und kopieren

Hallo,
ich suche nach einem Batch, der folgendes macht:

1. Durchsuche alle .html-Dateien in einem Verzeichnis (dieses hat keine Unterverzeichnisse mehr) nach Pfadangaben zu einer pdf und einer dxf-Datei.
So eine Pfadangabe in einer .html-Datei sieht etwa so aus:
<a href="../../pdf/web/7211.pdf">  
Also relative Pfadangaben.

2. Wenn Du alle Pfadangaben in jeder .html-Datei in diesem Verzeichnis gefunden hast, kopiere alle .pdf und .dxf-Dateien aus den gefundenen Pfadangaben in einen neuen Unterordner "Dokumente".
Alternativ kann das natürlich auch so ablaufen:
Wenn Du die erste Pfadangabe in der ersten .html-Datei gefunden hast, kopiere sofort die gefundene .pdf oder .dxf-Datei in einen neuen Unterordner "Dokumente" und suche dann nach der nächsten Pfadangabe, wenn Du keine mehr findest, nimm die nächste .html-Datei und suche dort etc, bis alle Dateien durchsucht und alle .pdf bzw. .dxf-Dateien kopiert sind.

3. Nett wäre noch ein log-file, woraus ersichtlich ist, welche Dateien erfolgreich kopiert wurden und wo es Probleme gab (zB weil die .pdf oder .dxf-Datei nicht existiert - sollte zwar nicht vorkommen, aber der Teufel schläft nicht...)

4. Ganz nett wäre noch eine Erklärung, wie das Ganze funktioniert face-wink

Ich hab zwar schon ähnliche Beiträge gefunden, blick da aber nicht durch (s. Punkt 4.) Wer kann mir da weiterhelfen?

Content-ID: 91346

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

Printed on: December 13, 2024 at 02:12 o'clock

Biber
Biber Jul 04, 2008 at 19:14:22 (UTC)
Goto Top
Moin kristov,

nein, keine Lösung, sondern nur eine Nachfrage zur Wahl des richtigen Werkzeúgs:
  • steht denn in den HTML-Dateien der Tag
<a href=,,[pdf oder dxf] >
als einziger "a href"-Tag in den HTMLs oder gibt es auch andere (auf *.jpg oder whatever), die Du aber nicht brauchst?
  • und stehen außer dem Tag noch andere Tags in der gleichen Zeile?

Grüße
Biber
bastla
bastla Jul 04, 2008 at 19:41:59 (UTC)
Goto Top
Hallo kristov!

Doch, ein Ansatz einer Lösung: face-wink
@echo off & setlocal

set "Basis=D:\test\files"  
set "Typ=.html"  
set "Ext=pdf|dxf"  
set "Ziel=%Basis%\Dokumente"  
set "Log=D:\Log.txt"  

if not exist "%Ziel%" md "%Ziel%"  
if exist "%Log%" del "%Log%"  

set F=%temp%\FindLinks.vbs
>  %F% echo T = CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll  
>> %F% echo Set R = New RegExp
>> %F% echo With R
>> %F% echo     .Pattern = "<a href=.*\.(%Ext%)""?>"  
>> %F% echo     .IgnoreCase = True
>> %F% echo     .Global = True
>> %F% echo     Set Links = .Execute(T)
>> %F% echo End With
>> %F% echo For Each L In Links
>> %F% echo     WScript.Echo Replace(Trim(Split(Left(L.Value, Len(L.Value) - 1), "=")(1)), "/", "\")  
>> %F% echo Next

for %%a in ("%Basis%\*%Typ%") do (  
    for /f "delims=" %%i in ('cscript //nologo %F% %%a') do (  
        if exist "%Basis%\%%~i" (  
            copy "%Basis%\%%~i" "%Ziel%">nul  
        ) else (
            echo Nicht gefunden: "%Basis%\%%~i">>"%Log%"  
        )
    )
)
if exist "%Log%" type "%Log%"  
Kurze Erklärung:
Nachdem der Zielordner (falls noch nicht vorhanden) erzeugt und die Log-Datei (falls bereits vorhanden) gelöscht wurde, erstellt der Batch ein VBScript.

In diesem wird in einer übergebenen Datei anhand "regulärer Ausdrücke" nach allen Textstücken gesucht, welche mit "<a href=" beginnen und mit ".pdf>" (mit oder ohne Anführungszeichen nach "pdf") bzw mit ".dxf>" enden. (Eine Plausibilitätsprüfung hinsichtlich der Länge des Links wäre sicher noch eine Überlegung wert ...)

Damit der gefundene Link brauchbar wird, erfolgt eine Zerlegung des Tags beim "=" und auch gleich eine Ersetzung von "/" durch "\" sowie ein Entfernen von Leerzeichen vor oder nach dem Link.

Das Script liefert zeilenweise je einen Link an den aufrufenden Batch zurück.

Im Batch dient die erste Schleife (%%a) der Behandlung aller .html-Dateien, die %%i-Schleife ruft das Script mit je einer dieser Dateien auf und erhält jeweils einzelne Links innerhalb von Anführungszeichen oder auch nicht, daher Weiterverarbeitung mit "%%~i" - jetzt ist der Link sicher durch Anführungszeichen begrenzt.

Danach wird kontrolliert, ob die verlinkte Datei vorhanden ist, und diese kopiert oder eine Fehlermeldung protokolliert. Beim Kopieren wird übrigens eine ev bereits vorhandene Datei im Ordner "Dokumente" überschrieben.

Abschließend wird, falls Dateien nicht gefunden wurden, die Liste dieser Dateien ausgegeben.


Anzumerken wäre, dass ein Link nach einem Zeilenumbruch oder etwa TAB zwischen "a href=" und dem Link derzeit nicht gefunden wird.

Grüße
bastla
kristov
kristov Jul 04, 2008 at 20:45:57 (UTC)
Goto Top
Hallo,

danke für deinen Beitrag. Hätte nicht gedacht, daß das freitags Nacht noch wer liest face-wink
Um auf Deine Fragen zurückzukommen:

  • Hab die files jetzt nicht vorliegen, aber soweit ich mich erinnern kann, gibt's fallweise noch links auf andere html-Dateien. Jedenfalls brauch ich die tatsächlich nicht.

  • Ja, es stehen noch andere Tags in der gleichen Zeile. Falls nötig, könnte ich dafür sorgen, daß die relevanten Tags in einer eigenen Zeile stehen.
1bgks6
1bgks6 Jul 04, 2008 at 21:00:36 (UTC)
Goto Top
Was ist »ein Batch«? Meinst Du ein Script für cmd.exe? Welches Betriebssystem, welche Version? Suchst Du eine Lösung für Dein Problem oder eine Lösung für die Aufgabenstellung?

0.
Start->Run->cmd
1.
help for
help set
help if
google »cmd redirection«
2.
help copy
3.
google »cmd redirection«

::REM Name der logdatei
set log=%~n0.log.txt
::REM Verzeichnis Dokumente erstellen und log initialisieren.
mkdir Dokumente >%log% 
::REM alle Dateien *html zeilenweise einlesen; an den Trennzeichen <, =, > in Tokens splitten.
::REM Das erste Token sei Variable %a; das zweite Token wird dann %b: der relative Pfad (inkl. ").  
::REM Wegen Verwendung im Script ist dem Variablennamen ein weiteres % voranzustellen: %%a,...
::REM Wenn Token 1 ein »a href« ist, in die Bearbeitung einsteigen ...
::REM Wenn die Extension von %b dxf oder pdf ist, Datei nach Ordner Dokumente kopieren.
for /F "tokens=1,2 delims=<=>" %%a in (*.html) do if "%%a"=="a href" (  
echo %%b >>%log%
if "%%~xb"=="dxf" copy /y %%b Dokumente >>%log%  
if "%%~xb"=="pdf" copy /y %%b Dokumente >>%log%  
)

4.
Das Ganze funktioniert (abgesehen von der üblichen noch notwendigen Popelei) bestenfalls zufällig: Es ist kaum annehmbar, daß die Anker an fixen Stellen in den HTML-Dateien stehen, genau ein HTML-Tag pro Zeile, und das Tag nie auf mehrere Zeilen verteilt. In einem nullten Durchgang müßten diese Vorraussetzungen vorbereitet werden. Ein Cmd-Script ist dafür ein masochistischer Lösungsansatz.
kristov
kristov Jul 04, 2008 at 21:11:26 (UTC)
Goto Top
Hallo, bastla!

Erst mal danke für Deinen Ansatz, der für mich jetzt tatsächlich wie eine Lösung aussieht face-smile
Besonders freut mich, daß Du Dich auch um Punkt 4 angenommen hast!

So wie's ausschaut, hast Du auch gleich Sachen eingebaut, über die ich noch nicht nachgedacht habe (bereits vorhandene Dateien überschreiben, vorhandene log-Datei löschen), das find ich wirklich klasse!

An und für sich sollte nach "a href=" kein Tab drin sein, ebensowenig ein manueller Zeilenumbruch, sodaß ich mir da keine Sorgen mache.

Ich werd's asap testen und vom Ergebnis berichten!
bastla
bastla Jul 04, 2008 at 21:12:37 (UTC)
Goto Top
Hallo 1bgks6 und willkommen im Forum!

Ein Cmd-Script ist dafür ein masochistischer Lösungsansatz.
"Masochistisch" ist vielleicht etwas übertrieben, aber mühsam ist es sicher ...

Einige Anmerkungen zu
if "%%~xb"=="dxf" copy /y %%b Dokumente >>%log%  
Da "%%~xb" als Ergebnis zB ".dxf" liefert, gehört der Punkt auch in den Vergleichswert.
Mit "if /i" kannst Du dafür sorgen, dass auch ".DXF"-Dateien kopiert werden.
Ein "copy" in einem Batch kommt ohne "/y" aus.
Der durch ">>%log%" erzeugte Eintrag "1 Datei(en) kopiert." ist zwar informativ, aber vielleicht doch besser mit der vorhergehenden Zeile zu kombinieren - etwa:
if /i "%%~xb"==".dxf" copy "%%~b" Dokumente && echo Kopiert: "%%~b">>"%log%"  
Grüße
bastla
bastla
bastla Jul 04, 2008 at 21:35:36 (UTC)
Goto Top
Hallo kristov!

Falls "asap" nicht mehr auf dieses Wochenende fallen sollte, werde ich urlaubsbedingt Deine Rückmeldung wohl erst in etwa 10 Tagen zu Gesicht bekommen ...

Grüße
bastla
kristov
kristov Jul 04, 2008 at 21:41:45 (UTC)
Goto Top
Hallo, Björn!

  • Ein Batch ist ein schrittweises Abarbeiten von Befehlsfolgen.
  • Ja, ich meine ein Script für cmd.exe
  • XP SP2
  • schwer zu sagen... Am Anfang war das Problem, daraus wurde die Aufgabenstellung. Das Problem haben die Mitarbeiter definiert, die Aufgabenstellung hab ich daraus abgeleitet. Wenn es der Sache dienlich ist, schildere ich gerne das Problem:

Es existieren mehrere Ordner, die jeweils mehrere (können praktisch schon mal 50, theoretisch maximal soviel, wie die Festplatte verträgt, sein) html-Dateien beinhalten. Ganz konkret sind das Stücklisten für irgendwelche Baugruppen und deren Bauteile. In jeder Stückliste (=html-Datei, für jede Baugruppe und jeden Bauteil 1 Stück) sind Links zu den Dokumentationen (pdf) und/oder zu den technischen Zeichnungen (dxf). Jetzt sollen alle pdf- und dxf-Dateien eines solchen Ordners zB einem (potentiellen) Lieferanten geschickt werden. Das wird so gelöst, indem jede einzelne html-Datei geöffnet und die pdf- und dxf-Dateien mit "Ziel speichern unter..." in einen separaten Ordner kopiert werden. Das ganze ist enorm zeitaufwändig und fehleranfällig. Sollte das Problem jetzt nicht der Aufgabenstellung entsprechen, bin ich für jeden Hinweis/Vorschlag dankbar.

0.
oder windows+r ->cmd face-wink

1.
ist mir zu oberflächlich bzw. zu theoretisch
cmd redirection ist gut. Kannte nur ">"

2.
ist mir klar

3.
ziemlich gut erklärt, danke!

4.
Da hast Du wohl die scripts noch nicht gesehen, die Biber und bastla hier schon abgeliefert haben. Ich halte sehr viel von batches, da sie imho sehr mächtig sind und schnell arbeiten, nur mit der Handhabung hapert's halt leider.
kristov
kristov Jul 04, 2008 at 21:49:59 (UTC)
Goto Top
Guten Abend face-wink

Naja, ich werd' sehen, was sich machen läßt, aber das WE ist bei mir schon ziemlich verplant. Außerdem würde ich mich hüten, Dich jetzt das ganze WE mit meinem Problemchen zu quälen, nur weil Du dann ein paar Tage nicht da bist. Das ganze soll Dir ja auch Spaß machen (und ich glaube, daß tut es tatsächlich!).

Ich wünsch Dir jedenfalls eine erholsame, computerfreie(!) Zeit!

kristov
1bgks6
1bgks6 Jul 04, 2008 at 23:47:35 (UTC)
Goto Top
Yepp, Danke für die nachgetragene Popelei. Mit "&& Kopiererfolg" wäre ich allerdings vorsichtig, weil der Errorlevel-Return von copy undokumentiert ist.
1bgks6
1bgks6 Jul 04, 2008 at 23:58:50 (UTC)
Goto Top
Gut, unter XP hast Du dann nicht nur command.com, sondern cmd.exe, kannst die Extensions aktivieren, und damit paßt es dann wie geschrieben (mit den Korrekturen von bastla).
kristov
kristov Jul 08, 2008 at 05:35:13 (UTC)
Goto Top
Guten Morgen!

Hab das script endlich getestet, es funktioniert aber nicht richtig. Ich glaube, der Hund liegt im VBScript begraben. Jedenfalls wird der Ordner Dokumente angelegt und auch ein künstlich erstelltes log.txt wird gelöscht. Das klappt also.

Was nicht klappt (wie ich glaube), ist das VBScript. Wenn ich die Datei FindLinks.vbs direkt aufrufe, bekomme ich den Fehler "Index außerhalb des gültigen Bereichs", Code:800A0009, Laufzeitfehler in Microsoft VBScript, Zeile:1, Zeichen:1. Hat jemand eine Idee, wie es zu diesem Fehler kommt?

Außerdem interessiert mich die Zeile
>  %F% echo T = CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll  

Sollte es nicht heißen
>>  %F% echo set T = CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll  

Jedenfalls habe ich das so ausprobiert, es funktionert trotzdem nicht. Kann mir da jemand weiterhelfen?
Biber
Biber Jul 08, 2008 at 08:43:26 (UTC)
Goto Top
Moin kristov,

schau mal bitte nach, auf welches Verzeichnis Deine %temp%-Variable zeigt.
Wahrscheinlich kommt bei heraus:
>set temp
TEMP=C:\Dokumente und Einstellungen\kristov\Lokaler Firlefanz\Temp
... also ein Pfad mit Leerzeichen im Namen.
In diesem Fall solltest Du diese %F%-Variable ebenfalls in Anführungszeichen setzen. Also bastlas Zeilen 12/13 anpassen:
...
set F="%temp%\FindLinks.vbs"  
> %F% echo T = CreateObject
...

[rein biooptische Kurzanalyse, nicht getestet]

Grüße
Biber
kristov
kristov Jul 08, 2008 at 12:51:44 (UTC)
Goto Top
Hallo, Biber!

Danke für den Input. Hab's probiert, das war's leider nicht. Das VBScript wird korrekt angelegt und auch die Inhalte stehen so drin, wie's in der batch vorgegeben wird. Hab jetzt statt der temp-Variable die Basis-Variable genommen, die hat genau 8 Zeichen, die FindLinks.vbs wird auch hier korrekt angelegt, jedoch der Fehler bleibt der gleiche. Werd mir das CreateObject genau zerlegen und durchprüfen müssen, was das genau macht und ob die Syntax so stimmt...
bastla
bastla Jul 14, 2008 at 22:08:06 (UTC)
Goto Top
Hallo kristov und Biber, bin wieder da ...

... auf welches Verzeichnis Deine %temp%-Variable zeigt.
... sollte als Fehlerquelle auszuschließen sein, da für %TEMP% der Kurzname verwendet werden sollte und daher das Leerzeichen nicht zum Tragen käme - Anführungszeichen schaden aber natürlich nicht. face-wink

Werd mir das CreateObject genau zerlegen und durchprüfen müssen, was das genau macht
Der gesamte in der als Parameter übergebenen Datei (wenn denn eine übergeben wird, siehe unten) enthaltene Text wird für die Linksuche durch diese Zeile in eine Variable (T) eingelesen. (Das einfache ">" ist übrigens Absicht - damit wird sicher gestellt, dass das Script immer neu erzeugt wird, da die erste "echo"-Zeile so eine alte Version überschreibt.)

und ob die Syntax so stimmt...
Der Fehlermeldung nach liegt das Problem darin, dass das Script ohne Übergabe eines Argumentes (geöffnet/gelesen werden soll ja die Datei in WScript.Arguments(0)) aufgerufen wird - was eigentlich, obwohl ich in Zeile 26 die Anführungszeichen um das "%%a" herum vergessen habe, gar nicht möglich sein sollte - wenn %%a leer wäre, dürfte ja das "do" der "for"-Schleife nicht ausgeführt werden, und wenn es passende (.html-) Dateien mit einem Leerzeichen im Namen gibt, wäre die VBScript-Fehlermeldung "Die Datei wurde nicht gefunden." ...

Um dem Problem auf die Spur zu kommen, bitte einmal in Zeile 24 ein "echo on" einfügen und in der entstehenden Ausgabe den Dateinamen/-pfad hinter
... cscript //nologo C:\DOKUME~1\kristov\LOKALE~1\Temp\FindLinks.vbs
überprüfen.

Grüße
bastla
kristov
kristov Jul 15, 2008 at 07:25:05 (UTC)
Goto Top
Guten Morgen, bastla!

Hoffe, Du hattest einen erholsamen Urlaub!
Danke, daß Du Dich meines Problems noch einmal annimmst. Hab jetzt ein echo on reingegeben und erhalte folgende Ausgabe:

C:\z0302_02\html>for %a in ("C:\z0302_02\*.html") do (for /F "delims=" %i in ('c  
script //nologo "C:\DOKUME~1\kristov\LOKALE~1\Temp\FindLinks.vbs" %a') do (if ex  
ist "C:\z0302_02\%~i" (copy "C:\z0302_02\%~i" "C:\z0302_02\Dokumente" 1>nul )  e  
lse (echo Nicht gefunden: "C:\z0302_02\%~i" 1>>"C:\Log.txt" ) ) )  

C:\z0302_02\html>if exist "C:\Log.txt" type "C:\Log.txt"  

Der Code sieht jetzt so aus (Basis und Log verändert, F in Anführungszeichen gesetzt, echo on):

@echo off & setlocal

set "Basis=C:\z0302_02"  
set "Typ=.html"  
set "Ext=pdf|dxf"  
set "Ziel=%Basis%\Dokumente"  
set "Log=C:\Log.txt"  

if not exist "%Ziel%" md "%Ziel%"  
if exist "%Log%" del "%Log%"  

set F="%temp%\FindLinks.vbs"  
>  %F% echo T = CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll  
>> %F% echo Set R = New RegExp
>> %F% echo With R
>> %F% echo     .Pattern = "<a href=.*\.(%Ext%)""?>"  
>> %F% echo     .IgnoreCase = True
>> %F% echo     .Global = True
>> %F% echo     Set Links = .Execute(T)
>> %F% echo End With
>> %F% echo For Each L In Links
>> %F% echo     WScript.Echo Replace(Trim(Split(Left(L.Value, Len(L.Value) - 1), "=")(1)), "/", "\")  
>> %F% echo Next
echo on
for %%a in ("%Basis%\*%Typ%") do (  
    for /f "delims=" %%i in ('cscript //nologo %F% %%a') do (  
        if exist "%Basis%\%%~i" (  
            copy "%Basis%\%%~i" "%Ziel%">nul  
        ) else (
            echo Nicht gefunden: "%Basis%\%%~i">>"%Log%"  
        )
    )
)
if exist "%Log%" type "%Log%"  
bastla
bastla Jul 15, 2008 at 10:18:01 (UTC)
Goto Top
Hallo kristov!

Wie oben schon angemerkt, muss zur Sicherheit in Zeile 26 auch "%%a" unter Anführungszeichen stehen, also:
    for /f "delims=" %%i in ('cscript //nologo %F% "%%a"') do (  

Allerdings weist Deine Ausgabe darauf hin, dass überhaupt keine .html-Datei gefunden wird - gesucht wird nämlich nur im %Basis%-Verzeichnis. Je nachdem, wo das neue "Dokumente"-Verzeichnis hin soll, ist daher entweder der Basis-Pfad oder in Zeile 25 das zu durchsuchende Verzeichnis anzupassen ...

Grüße
bastla
kristov
kristov Jul 15, 2008 at 11:00:38 (UTC)
Goto Top
Hallo, bastla!

Du hast natürlich recht. Akkurat war das %Basis%-Verzeichnis nicht korrekt. Jetzt sieht die Ausgabe so aus (und für jede .html-Datei ähnlich):

N:\HTML\z0302_03\html>(for /F "delims=" %i in ('cscript //nologo "C:\DOKUME~1\cw  
immer\LOKALE~1\Temp\FindLinks.vbs" "N:\html\z0302_03\html\z0318AA-06.html"') do  
(if exist "N:\html\z0302_03\html\%~i" (copy "N:\html\z0302_03\html\%~i" "N:\html  
\z0302_03\html\Dokumente" 1>nul )  else (echo Nicht gefunden: "N:\html\z0302_03\  
html\%~i" 1>>"C:\Log.txt" ) ) )  

Jetzt ist mir aufgefallen, daß der copy-Befehl möglicherweise einen falschen Quellpfad enthalten könnte.

%~i müsste beispielsweise N:\PDF\nz001.pdf sein, da es ja in der .html-Datei heißt: <a href="../../../PDF/nz001.pdf">. Könnte es sein, daß er mit der Kombination aus der %Basis% und der %%i nicht zurecht kommt (Mischung aus absolutem und relativem Pfad?).
bastla
bastla Jul 15, 2008 at 12:01:19 (UTC)
Goto Top
Hallo kristov!

Könnte es sein, daß er mit der Kombination aus der %Basis% und der %%i nicht zurecht kommt (Mischung aus absolutem und relativem Pfad?).
Das sollte kein Problem sein.
Wie sieht denn die nächste Ausgabezeile aus (hier sollte ja "%~i" durch den extrahierten Pfad ersetzt werden)?

Du kannst testweise auch einmal an der Kommandozeile eingeben (oder auch per Drag and Drop der .html-Datei auf die .vbs-Datei testen):
cscript //nologo "C:\DOKUME~1\cwimmer\LOKALE~1\Temp\FindLinks.vbs" "N:\html\z0302_03\html\z0318AA-06.html" 
Das Ergebnis müsste der durch das VBScript extrahierte Linkpfad sein.

Grüße
bastla
kristov
kristov Jul 15, 2008 at 13:02:01 (UTC)
Goto Top
Hallo, bastla!

Hab jetzt zuerst das Script aufgerufen (die Findlinks.vbs wurde korrekt angelegt" und dann den Einzeiler. Hoffe, das ist richtig so. Einen Linkpfad habe ich jedoch nicht zurück bekommen, sondern einfach nichts?
bastla
bastla Jul 15, 2008 at 13:41:44 (UTC)
Goto Top
Hallo Kristov!

Bei mir sieht das so aus (ich habe einfach den Punkt 1 Deines Beitrages als "D:\Test\files\Eine Datei.html" gespeichert):
D:\>type "%temp%\FindLinks.vbs"  
T = CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)  
).ReadAll
Set R = New RegExp
With R
    .Pattern = "<a href=.*\.(pdf|dxf)""?>"  
    .IgnoreCase = True
    .Global = True
    Set Links = .Execute(T)
End With
For Each L In Links
    WScript.Echo Replace(Trim(Split(Left(L.Value, Len(L.Value) - 1), "=")(1)), "  
/", "\")  
Next

D:\>type "D:\Test\files\Eine Datei.html"  
1. Durchsuche alle .html-Dateien in einem Verzeichnis (dieses hat keine Unterver
zeichnisse mehr) nach Pfadangaben zu einer pdf und einer dxf-Datei.
So eine Pfadangabe in einer .html-Datei sieht etwa so aus: <a href="../../pdf/we  
b/7211.pdf">, also relative Pfadangaben.  

D:\>cscript "%temp%\FindLinks.vbs" "D:\Test\files\Eine Datei.html"  
"..\..\pdf\web\7211.pdf"  

D:\>
Wie es aussieht, kann das Script die Links in Deinen Dateien nicht finden. Könntest Du eine Originaldatei posten (oder auch mailen)?

Grüße
bastla
kristov
kristov Jul 15, 2008 at 14:03:19 (UTC)
Goto Top
Hallo bastla,

klar, kann ich eine Originaldatei posten. Die kleinste hat allerdings 10kB.
Und jetzt muß ich Dir was beichten: Hab grade gesehen, dass im <a>-Tag auch noch ein target angegeben ist, ein Link in wirklichkeit also so aussieht:
<a href="../../../PDF/16463_02.pdf" target="_blank">  
Ich glaube, da liegt der Hund begraben. Das tut mir jetzt wirklich leid, daß ich das nicht früher bemerkt habe! Kannst Du mir noch sagen, wie die Zeile 16 jetzt anzupassen ist, damit's klappt?

Demütig,
kristov
kristov
kristov Jul 17, 2008 at 07:24:31 (UTC)
Goto Top
Hallo, bastla!

Hab jetzt mal das target="_blank" rausgenommen und das script funktioniert wunderbar!
Möchte allerdings das target="_blank" drin lassen, habe deshalb
.Pattern = "<a href=.*\.(%Ext%) target=""_blank""""?>"  
verwendet. Das sollte nach meinem Verständnis erst mal richtig sein. Jetzt schmeißt es mich beim Zerlegen des Strings. Es funktioniert ja so, daß die Zeichen links vom = weggeschnitten werden (aus <a href="Pfad/Dateiname"> wird Pfad/Dateiname), mit dem target jedoch müßte auch noch der Teil rechts von der Extension weg (also aus <a href="Pfad/Dateiname" target="_blank"> sollte wieder Pfad/Dateiname werden. Leider verstehe ich die Zeile 22 nicht ganz. Könntest Du mir das bitte nochmal erklären?
kristov
kristov Jul 17, 2008 at 08:31:40 (UTC)
Goto Top
OK, hab's hinbekommen:
>> %F% echo     .Pattern = "<a href=.*\.(%Ext%)""? target=""_blank"">"  
und
>> %F% echo     WScript.Echo Replace(Trim(Split(Left(L.Value, Len(L.Value) - 17), "=")(1)), "/", "\")  

Vielen Dank an alle, besonders an bastla!