Dateinamen aus Ftpverzeichnis auslesen, in HTML-Links umwandeln und in .txt speichern
Hallo liebe Administratoren,
ich habe hier eine Aufgabe mit der ich alleine wohl nicht (rechtzeitig) fertig werde.
Folgendes Problem:
Ich muss ca 300 .pdf Dateien auf unseren Dokumenteserver verschieben und als html-link in eine Liste eintragen.
Idee:
Eine .bat (gesteuert durch eine .ini) mit temporären .vbs....
1) Die .bat wird gestartet und zieht sich aus einer .ini die Daten zum connecten des ftp.
2) Es wird ein vbs. gestartet in dem der auszulesende Unterordner eingegeben werden kann.
3) Die .bat übernimmt die Eingabe aus dem Skript und springt in das eingegebene Verzeichnis.
4) Alle Dateien mit der Endung .pdf werden ausgelesen
5) Die Pfade (bsp. /html/Jänner/Messe/ALL) werden in Html-Links umgewandelt (bsp: hllp://Firma.de/html/Jänner/Messe/ALL/--->Dateiname<---.pdf) und in einer .txt gespeichert.
Wer kann mir denn da auf die schnelle mal helfen? Das ganze steht am Montag an und ich komme mit Google bzw. der Suchfunktion des Forums nicht wirklich (funktionstüchtig) weiter.
Gruß Soidberg
ich habe hier eine Aufgabe mit der ich alleine wohl nicht (rechtzeitig) fertig werde.
Folgendes Problem:
Ich muss ca 300 .pdf Dateien auf unseren Dokumenteserver verschieben und als html-link in eine Liste eintragen.
Idee:
Eine .bat (gesteuert durch eine .ini) mit temporären .vbs....
1) Die .bat wird gestartet und zieht sich aus einer .ini die Daten zum connecten des ftp.
2) Es wird ein vbs. gestartet in dem der auszulesende Unterordner eingegeben werden kann.
3) Die .bat übernimmt die Eingabe aus dem Skript und springt in das eingegebene Verzeichnis.
4) Alle Dateien mit der Endung .pdf werden ausgelesen
5) Die Pfade (bsp. /html/Jänner/Messe/ALL) werden in Html-Links umgewandelt (bsp: hllp://Firma.de/html/Jänner/Messe/ALL/--->Dateiname<---.pdf) und in einer .txt gespeichert.
Wer kann mir denn da auf die schnelle mal helfen? Das ganze steht am Montag an und ich komme mit Google bzw. der Suchfunktion des Forums nicht wirklich (funktionstüchtig) weiter.
Gruß Soidberg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 64378
Url: https://administrator.de/contentid/64378
Ausgedruckt am: 19.11.2024 um 07:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo Soidberg!
Ab Punkt 2 etwa so:
Für FTP siehe zB FTP Kommandos automatisieren
Grüße
bastla
... mit temporärem .vbs....
Irgendwie fühle ich mich angesprochen ... Ab Punkt 2 etwa so:
@echo off & setlocal
set "Txt=Ergebnis.txt"
set "Dom=http://Firma.de"
set "Verz=%temp%\VerzeichnisHolen.vbs"
echo Set V=CreateObject("Shell.Application").BrowseForFolder(0,"Verzeichnis wählen",16,17)>"%Verz%"
echo If Not TypeName(V)="Nothing" Then Set B=V.Self:WScript.Echo B.Path>>"%Verz%"
set Quelle=
for /f "delims=" %%i in ('cscript //nologo "%Verz%"') do set "Quelle=%%i"
if not defined Quelle goto :Fehler
pushd "%Quelle%"
if exist "%Txt%" del "%Txt%"
for %%i in (*.pdf) do call :ProcessFile "%%i"
type "%Txt%"
:: ... und was sonst noch anliegt (copy oder move oder ...)
popd
goto :eof
:ProcessFile
set "Pfad=%~pnx1"
set Pfad=%Pfad:\=/%
echo %Dom%%Pfad%>>"%Txt%"
goto :eof
:Fehler
echo Es wurde kein Verzeichnis ausgewählt!
Für FTP siehe zB FTP Kommandos automatisieren
Grüße
bastla
So, jetzt die Punkte 2) - 5) als Skizze oben, allerdings frage ich mich, wozu 2) und 3) dienen, wenn es nur um ein bestimmtes bekanntes Verzeichnis gehen soll ...
... und Punkt 1) hat (in der aktuellen Formulierung) mit dem Rest eigentlich gar nix zu tun (außer als Vorbereitung für 4b und/oder 6).
Grüße
bastla
... und Punkt 1) hat (in der aktuellen Formulierung) mit dem Rest eigentlich gar nix zu tun (außer als Vorbereitung für 4b und/oder 6).
Grüße
bastla
Hallo Soidberg!
Also eher so:
Neben der Anpassung der "set"-Zeilen am Anfang habe ich zum Testen in der viertletzten Zeile die Stellenanzahl der Zeichen, die vor dem benötigten Teil des "ftp-dir"-Ergebnisses zu entfernen sind (also etwa "-rw-r----- ..."), konstant mit 55 festgelegt - die automatische Zerlegung der Zeile reiche ich vielleicht im Lauf des Sonntags nach (obwohl diese Anzahl eigentlich recht konstant sein müsste).
Vielleicht könntst Du zur Sicherheit einmal eine solche Zeile mit dem "dir"-Befehl von "ftp" erstellen und posten. Bei meinen Tests sah die etwa so aus (Pfad und Dateiname frei erfunden, aber im Format entsprechend):
Der Teil vor "/test..." ist die besagten 55 Zeichen lang.
Grüße
bastla
[Edit] Konstante "http://firma.de" durch Variable %Dom% ersetzt. [/Edit]
Also eher so:
@echo off & setlocal
set "ftpS=ftp.server.de"
set "User=Username"
set "Pass=Passwort"
set "Txt=D:\Ergebnis.txt"
set "Dom=http://Firma.de"
set "ini=D:\ftpini.txt"
set "Ext=.pdf"
set "Verz=%temp%\VerzeichnisHolen.vbs"
echo Set V=CreateObject("Shell.Application").BrowseForFolder(0,"Verzeichnis?",0,"ftp://%User%:%Pass%@%ftpS%")>"%Verz%"
echo If Not V Is Nothing Then Set F=V.Self:P=F.Path:WScript.Echo Mid(P,Instr(Instr(P,"@")+1,P,"/"))>>"%Verz%"
for /f "delims=" %%i in ('cscript //nologo "%Verz%"') do set "Quelle=%%i"
del "%Verz%"
if not defined Quelle goto :Fehler
echo open %ftpS%>"%ini%"
echo %User%>>"%ini%"
echo %Pass%>>"%ini%"
echo dir %Quelle%*%Ext%>>"%ini%"
echo quit>>"%ini%"
if exist "%Txt%" del "%Txt%"
for /f "delims=" %%i in ('ftp -s:"%ini%"^|findstr /v "ftp^> dir"^|findstr "%Ext%"') do set "Zeile=%%i" & call :ProcessLine
if exist "%ini%" del "%ini%"
type "%Txt%"
:: ... und was sonst noch anliegt (copy oder move oder ...)
goto :eof
:ProcessLine
echo %Dom%%Zeile:~55%>>"%Txt%"
goto :eof
:Fehler
echo Es wurde kein Verzeichnis ausgewählt!
Neben der Anpassung der "set"-Zeilen am Anfang habe ich zum Testen in der viertletzten Zeile die Stellenanzahl der Zeichen, die vor dem benötigten Teil des "ftp-dir"-Ergebnisses zu entfernen sind (also etwa "-rw-r----- ..."), konstant mit 55 festgelegt - die automatische Zerlegung der Zeile reiche ich vielleicht im Lauf des Sonntags nach (obwohl diese Anzahl eigentlich recht konstant sein müsste).
Vielleicht könntst Du zur Sicherheit einmal eine solche Zeile mit dem "dir"-Befehl von "ftp" erstellen und posten. Bei meinen Tests sah die etwa so aus (Pfad und Dateiname frei erfunden, aber im Format entsprechend):
-rw-r----- 1 web web 12042 Dez 11 14:37 /test/tabellen/tab-50-ghp.html
Der Teil vor "/test..." ist die besagten 55 Zeichen lang.
Grüße
bastla
[Edit] Konstante "http://firma.de" durch Variable %Dom% ersetzt. [/Edit]
Hallo Soidberg!
Unter der Voraussetzung, dass eine "dir"-Zeile bei Dir vergleichbar aussieht, könntest Du ersatzweise die folgende "for"-Zeile verwenden und das Unterprogramm ":ProcessLine" weglassen:
Damit wird alles nach dem ersten "/" als auszugebender Dateipfad betrachtet.
Grüße
bastla
Unter der Voraussetzung, dass eine "dir"-Zeile bei Dir vergleichbar aussieht, könntest Du ersatzweise die folgende "for"-Zeile verwenden und das Unterprogramm ":ProcessLine" weglassen:
for /f "tokens=1* delims=/" %%i in ('ftp -s:"%ini%"^|findstr /v "ftp^> dir"^|findstr "%Ext%"') do echo %Dom%/%%j>>"%Txt%"
Grüße
bastla
Hallo Soidberg!
Welche Variante hast Du verwendet? Ich nehme an, die zweite (mit "for"-Schleife statt "call") - in diesem Fall sollte zumindest einmal Problem 2) (überflüssiges "/html") so zu lösen sein, dass Du auf "tokens=2*" änderst.
Zu 1) fällt mir eigentlich auf Anhieb nix ein - kannst Du einmal ein "ftp-dir"-Listing reinstellen?
Schönheitsfehler 1) Derzeit gibt es (soweit ich sehe) keine Textausgaben (das "type" steht nur aus Testgründen dort) ...
2) Mein Code sollte weitestgehend so bleiben können wie bisher, nur dass eben die "set"-Zeilen am Anfang aus der ".ini" befüllt werden müssen.
Grüße
bastla
[Edit] Hatte Dein Edit noch nicht gesehen ... [/Edit]
Welche Variante hast Du verwendet? Ich nehme an, die zweite (mit "for"-Schleife statt "call") - in diesem Fall sollte zumindest einmal Problem 2) (überflüssiges "/html") so zu lösen sein, dass Du auf "tokens=2*" änderst.
Zu 1) fällt mir eigentlich auf Anhieb nix ein - kannst Du einmal ein "ftp-dir"-Listing reinstellen?
Schönheitsfehler 1) Derzeit gibt es (soweit ich sehe) keine Textausgaben (das "type" steht nur aus Testgründen dort) ...
2) Mein Code sollte weitestgehend so bleiben können wie bisher, nur dass eben die "set"-Zeilen am Anfang aus der ".ini" befüllt werden müssen.
Grüße
bastla
[Edit] Hatte Dein Edit noch nicht gesehen ... [/Edit]
... als Ergänzung zum Einlesen der Variablen ("Schöheitsfehler 2)"):
Wenn die entsprechende ".ini"-Datei etwa folgenden Inhalt hat:
kannst Du mit
alle Variablen setzen.
Grüße
bastla
Wenn die entsprechende ".ini"-Datei etwa folgenden Inhalt hat:
ftpS=ftp.server.de
User=Username
Pass=Passwort
Dom=http://Firma.de
Ext=.pdf
for /f "tokens=1* delims==" %%i in (ini.txt) do set "%%i=%%j"
Grüße
bastla
Hallo Soidberg!
(Ungetesteter) Letztstand:
Dazu die "ftplister.ini:"
Die auszugebende Verzeichnisebene wird jetzt, Deinem Vorschlag entsprechend, über die Variable %Slash% gesteuert (obwohl %DirLevel% vielleicht aussagekräftiger wäre). Ansonsten habe ich nur zur Sicherheit einige Anführungszeichen ergänzt und damit hoffentlich nix verschlimmbessert.
Grüße
bastla
(Ungetesteter) Letztstand:
@echo off & setlocal
for /f "tokens=1* delims==" %%i in (ftplister.ini) do set "%%i=%%j"
set "ini=%temp%\ftpdata.txt"
set "Verz=%temp%\VerzeichnisHolen.vbs"
set "Txt=Ergebnis.txt"
set "LOG=ERROR.LOG"
if exist "%LOG%" del "%LOG%"
if exist "%Txt%" del "%Txt%"
echo Set V=CreateObject("Shell.Application").BrowseForFolder(0,"Bitte das Verzeichnis auswählen",0,"ftp://%User%:%Pass%@%ftpS%")>"%Verz%"
echo If Not V Is Nothing Then Set F=V.Self:P=F.Path:WScript.Echo Mid(P,Instr(Instr(P,"@")+1,P,"/"))>>"%Verz%"
for /f "delims=" %%i in ('cscript //nologo "%Verz%"') do set "Quelle=%%i"
del "%Verz%"
if not defined Quelle goto :Fehler
echo open %ftpS%>"%ini%"
echo %User%>>"%ini%"
echo %Pass%>>"%ini%"
echo dir %Quelle%*%Ext%>>"%ini%"
echo quit>>"%ini%"
for /f "tokens=%Slash%* delims=/" %%i in ('ftp -s:"%ini%"^|findstr /v "ftp^> dir"^|findstr "%Ext%"') do echo %Dom%/%%j>>"%Txt%"
if exist "%ini%" del "%ini%"
"%Txt%"
goto :eof
:Fehler
echo.>%LOG%
echo Es wurde kein Verzeichnis zum auslesen ausgewählt oder das Programm wurde vorzeitig beendet!>>%LOG%
echo.>>%LOG%
echo Bitte starten Sie das Tool neu, warten Sie einen Moment (ca.5-10 Sekunden, je nach Internetanbindung) und wählen Sie dann einen Ordner aus.>>%LOG%
"%LOG%"
goto :eof
ftpS=ftp.server.de
User=Tester01
Pass=Testerpass01
Dom=http://ftp.serve.de
Slash=2
Ext=.pdf
Die auszugebende Verzeichnisebene wird jetzt, Deinem Vorschlag entsprechend, über die Variable %Slash% gesteuert (obwohl %DirLevel% vielleicht aussagekräftiger wäre). Ansonsten habe ich nur zur Sicherheit einige Anführungszeichen ergänzt und damit hoffentlich nix verschlimmbessert.
Grüße
bastla