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

Dateinamen aus Ftpverzeichnis auslesen, in HTML-Links umwandeln und in .txt speichern

Frage Entwicklung Batch & Shell

Mitglied: Soidberg

Soidberg (Level 1) - Jetzt verbinden

21.07.2007, aktualisiert 18.10.2012, 6326 Aufrufe, 12 Kommentare

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
Mitglied: bastla
21.07.2007, aktualisiert 18.10.2012
Hallo Soidberg!

... mit temporärem .vbs....
Irgendwie fühle ich mich angesprochen ...

Ab Punkt 2 etwa so:
01.
@echo off & setlocal 
02.
set "Txt=Ergebnis.txt" 
03.
set "Dom=http://Firma.de" 
04.
 
05.
set "Verz=%temp%\VerzeichnisHolen.vbs" 
06.
echo Set V=CreateObject("Shell.Application").BrowseForFolder(0,"Verzeichnis wählen",16,17)>"%Verz%" 
07.
echo If Not TypeName(V)="Nothing" Then Set B=V.Self:WScript.Echo B.Path>>"%Verz%" 
08.
set Quelle= 
09.
for /f "delims=" %%i in ('cscript //nologo "%Verz%"') do set "Quelle=%%i" 
10.
if not defined Quelle goto :Fehler 
11.
pushd "%Quelle%" 
12.
if exist "%Txt%" del "%Txt%" 
13.
for %%i in (*.pdf) do call :ProcessFile "%%i" 
14.
type "%Txt%" 
15.
:: ... und was sonst noch anliegt (copy oder move oder ...) 
16.
popd 
17.
goto :eof 
18.
:ProcessFile 
19.
set "Pfad=%~pnx1" 
20.
set Pfad=%Pfad:\=/% 
21.
echo %Dom%%Pfad%>>"%Txt%" 
22.
goto :eof 
23.
:Fehler 
24.
echo Es wurde kein Verzeichnis ausgewählt!
Für FTP siehe zB http://www.administrator.de/forum/ftp-kommandos-automatisieren-63987.ht ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
21.07.2007 um 22:27 Uhr
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
Bitte warten ..
Mitglied: Soidberg
21.07.2007 um 23:48 Uhr
Hy Bastla,

ja habe da tatsächlich etwas an Dich gedacht

Ich habe mich aber auch mal wieder etwas undeutlich ausgedrückt.

"2) Es wird ein vbs. gestartet in dem der auszulesende Unterordner eingegeben werden kann." Damit meine ich einen Unterordner auf dem Server.

Der Hintergrund ist ganz einfach, ich darf zukünftig lustiges Daten schieben veranstalten (vielen Dank an meinen Chef *grummel*) und die Unterordner in denen die Files auf den Servern liegen sind immer unterschiedlich.

Das Tool was ich bräuchte muss sich also auf den Server connecten, mich dann fragen welcher Unterordner auf dem Server ausgelesen werden soll und dort dann alle Dateien mit einer bestimmten Endung (in diesem Fall .pdf) erkennen und mir die html Links lokal in eine .txt speichert.

Somit brauche ich dann nur die Dateien hoch zuschieben, sage dem Tool über die .ini alle Daten und das Tool wirft mir eine Liste aus, Beispiel:

hllp://Fima2.de/Jänner/Messe/All/Test.pdf
hllp://Fima2.de/Jänner/Messe/All/beispiel.pdf
hllp://Fima2.de/Jänner/Messe/All/möglichkeit.pdf
usw.

Die Liste der Files muss ich dann in eine andere Abteilung geben die damit weiterarbeitet.

Ich hoffe ich konnte es (um diese Zeit) noch etwas verständlicher erklären.

Gruß Soidberg
Bitte warten ..
Mitglied: bastla
22.07.2007 um 03:24 Uhr
Hallo Soidberg!

Also eher so:

01.
@echo off & setlocal 
02.
set "ftpS=ftp.server.de" 
03.
set "User=Username" 
04.
set "Pass=Passwort" 
05.
set "Txt=D:\Ergebnis.txt" 
06.
set "Dom=http://Firma.de" 
07.
set "ini=D:\ftpini.txt" 
08.
set "Ext=.pdf" 
09.
 
10.
set "Verz=%temp%\VerzeichnisHolen.vbs" 
11.
echo Set V=CreateObject("Shell.Application").BrowseForFolder(0,"Verzeichnis?",0,"ftp://%User%:%Pass%@%ftpS%")>"%Verz%" 
12.
echo If Not V Is Nothing Then Set F=V.Self:P=F.Path:WScript.Echo Mid(P,Instr(Instr(P,"@")+1,P,"/"))>>"%Verz%" 
13.
for /f "delims=" %%i in ('cscript //nologo "%Verz%"') do set "Quelle=%%i" 
14.
del "%Verz%" 
15.
if not defined Quelle goto :Fehler 
16.
echo open %ftpS%>"%ini%" 
17.
echo %User%>>"%ini%" 
18.
echo %Pass%>>"%ini%" 
19.
echo dir %Quelle%*%Ext%>>"%ini%" 
20.
echo quit>>"%ini%" 
21.
if exist "%Txt%" del "%Txt%" 
22.
for /f "delims=" %%i in ('ftp -s:"%ini%"^|findstr /v "ftp^> dir"^|findstr "%Ext%"') do set "Zeile=%%i" & call :ProcessLine 
23.
if exist "%ini%" del "%ini%" 
24.
type "%Txt%" 
25.
:: ... und was sonst noch anliegt (copy oder move oder ...) 
26.
goto :eof 
27.
 
28.
:ProcessLine 
29.
echo %Dom%%Zeile:~55%>>"%Txt%" 
30.
goto :eof 
31.
:Fehler 
32.
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):
01.
-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]
Bitte warten ..
Mitglied: bastla
22.07.2007 um 17:44 Uhr
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:

01.
for /f "tokens=1* delims=/" %%i in ('ftp -s:"%ini%"^|findstr /v "ftp^> dir"^|findstr "%Ext%"') do echo %Dom%/%%j>>"%Txt%"
Damit wird alles nach dem ersten "/" als auszugebender Dateipfad betrachtet.

Grüße
bastla
Bitte warten ..
Mitglied: Soidberg
26.07.2007 um 13:19 Uhr
Ich habe noch mal Glück, das ganze wurde auf Mittwoch verschoben.

Ich schaue mir das mal heute abend an wenn ich daheim bin an und werde sofort berichten.

Gruß Soidberg
Bitte warten ..
Mitglied: Soidberg
26.07.2007 um 20:01 Uhr
So, ich konnte es mal testen und muss sagen ich bin begeistert!!

Ich habe zwar noch ein paar "Fehler" gefunden aber im Grunde funktioniert dein Vorschlag schon richtig gut.

Folgende Probleme an denen noch zum generellen Einsatz gefeilt werden müsste:

1) Die Ergebnis.txt sieht bei mir so aus:
01.
http://Domain.de /html/Messe/Jänner/01.pdf 
02.
http://Domain.de /html/Messe/Jänner/02.pdf 
03.
http://Domain.de /html/Messe/Jänner/03.pdf 
04.
http://Domain.de /html/Messe/Jänner/04.pdf 
05.
http://Domain.de /html/Messe/Jänner/05.pdf 
06.
http://Domain.de /html/Messe/Jänner/06.pdf 
07.
http://Domain.de/html/Messe/Jänner/07.pdf
Hinter Domain.de wird bei allen (bis auf den letzten Link!) ein Leerzeichen belassen.

2) Wir besitzen auf dem Server ein "html" Verzeichnis, ab dort beginnt sozusagen erst die Homepage. Die Links müssten ohne den Ordner "html" ausgegeben werden:
01.
http://Domain.de/Messe/Jänner/01.pdf 
02.
http://Domain.de/Messe/Jänner/02.pdf 
03.
http://Domain.de/Messe/Jänner/03.pdf 
04.
http://Domain.de/Messe/Jänner/04.pdf 
05.
http://Domain.de/Messe/Jänner/05.pdf 
06.
http://Domain.de/Messe/Jänner/06.pdf 
07.
http://Domain.de/Messe/Jänner/07.pdf


Schönheitsfehler (an denen kann man später arbeiten):

1) Da das ganze später eine .exe wird und keine Shell zu sehen sein wird, müssten wir die Textausgaben entweder auch in eine .vbs Ausgabe packen oder ich (das bekomme ich dann doch hin) lasse es etwas unschön in eine ERROR.txt exportieren.

2) Da die spätere .exe auch nicht mehr beschreibbar sein wird (mir gefallen .exe´n einfach besser) wäre es gut wenn wir die "Set´s" in eine .ini auslagern können. Dazu müsste aber dein kompletter Code umgestellt werden und das bekomme ich dann doch wieder nicht hin. Für Mittwoch langt erstmal die jetzige Version, die Ausgabefehler etc bekomme ich mit´m Editor weg, ist also auch mehr was für später wenn es ans verfeinern geht.

3) Da ja das Tool auch bei anderen funktionieren soll (falls es einer braucht) wäre es gut wenn man aktiv (eventuell wieder per .vbs) nach der Ordner Auswahl noch bestimmen könnte ob "nur dieser Ordner" oder "Alle Unterordner" mit durchsucht werden sollen....

Wobei mir schon klar ist das diese Bonusfunktion an die Grenzen der "kleinen Programmierung" stößt. Sollte es nicht machbar sein, so ist das verträglich!

P.S. Die Pfadangaben in deinem Original (D:\) habe ich mal durch %CD% ersetzt.

*Vielen lieben Dank soweit*

EDIT:
Mit deiner 2ten Varianter der FOR Schleife werden die Links auch ohne Leerzeichen ausgegeben! Mit dieser Variante würde also nur noch das Problem mit dem "html" Ordner übrig bleiben...


Gruß Soidberg
Bitte warten ..
Mitglied: bastla
26.07.2007 um 21:35 Uhr
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]
Bitte warten ..
Mitglied: bastla
26.07.2007 um 23:41 Uhr
... als Ergänzung zum Einlesen der Variablen ("Schöheitsfehler 2)"):
Wenn die entsprechende ".ini"-Datei etwa folgenden Inhalt hat:
01.
ftpS=ftp.server.de 
02.
User=Username 
03.
Pass=Passwort 
04.
Dom=http://Firma.de 
05.
Ext=.pdf
kannst Du mit
01.
for /f "tokens=1* delims==" %%i in (ini.txt) do set "%%i=%%j"
alle Variablen setzen.

Grüße
bastla
Bitte warten ..
Mitglied: Soidberg
29.07.2007 um 00:47 Uhr
Da ich meinen Text nicht posten kann (wid einfach nicht angezeigt) schicke ich Ihn Dir gerade per PN...

Gruß Soidberg
Bitte warten ..
Mitglied: bastla
29.07.2007 um 05:18 Uhr
Hallo Soidberg!

(Ungetesteter) Letztstand:

01.
@echo off & setlocal 
02.
for /f "tokens=1* delims==" %%i in (ftplister.ini) do set "%%i=%%j" 
03.
set "ini=%temp%\ftpdata.txt" 
04.
set "Verz=%temp%\VerzeichnisHolen.vbs" 
05.
set "Txt=Ergebnis.txt" 
06.
set "LOG=ERROR.LOG" 
07.
 
08.
if exist "%LOG%" del "%LOG%" 
09.
if exist "%Txt%" del "%Txt%" 
10.
echo Set V=CreateObject("Shell.Application").BrowseForFolder(0,"Bitte das Verzeichnis auswählen",0,"ftp://%User%:%Pass%@%ftpS%")>"%Verz%" 
11.
echo If Not V Is Nothing Then Set F=V.Self:P=F.Path:WScript.Echo Mid(P,Instr(Instr(P,"@")+1,P,"/"))>>"%Verz%" 
12.
for /f "delims=" %%i in ('cscript //nologo "%Verz%"') do set "Quelle=%%i" 
13.
del "%Verz%" 
14.
if not defined Quelle goto :Fehler 
15.
 
16.
echo open %ftpS%>"%ini%" 
17.
echo %User%>>"%ini%" 
18.
echo %Pass%>>"%ini%" 
19.
echo dir %Quelle%*%Ext%>>"%ini%" 
20.
echo quit>>"%ini%" 
21.
for /f "tokens=%Slash%* delims=/" %%i in ('ftp -s:"%ini%"^|findstr /v "ftp^> dir"^|findstr "%Ext%"') do echo %Dom%/%%j>>"%Txt%" 
22.
if exist "%ini%" del "%ini%" 
23.
"%Txt%" 
24.
goto :eof 
25.
 
26.
:Fehler 
27.
echo.>%LOG% 
28.
echo Es wurde kein Verzeichnis zum auslesen ausgewählt oder das Programm wurde vorzeitig beendet!>>%LOG% 
29.
echo.>>%LOG% 
30.
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% 
31.
"%LOG%" 
32.
goto :eof
Dazu die "ftplister.ini:"

01.
 ftpS=ftp.server.de 
02.
User=Tester01 
03.
Pass=Testerpass01 
04.
Dom=http://ftp.serve.de 
05.
Slash=2 
06.
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
Bitte warten ..
Mitglied: Soidberg
31.07.2007 um 19:28 Uhr
Ja das ist was ich brauche. Der benötigte Funktionsumfang wurde hier sogar übertroffen!

Ich bin schwer begeistert und ziehe (mal wieder) meinen Hut. Merci dafür, das ganze erleichtert mir meinen morgigen Tag um Stunden und ich bekomme die Möglichkeit meinem Chefchen ein paar große Augen machen zu können, denn....

Man muss nicht alles wissen/können, man muss nur wissen wen /wo man fragt. ;)

Hier wurde mir geholfen.

Im Prinzip können wir unser Projekt (meine Idee, deine Ausführung) der Allgemeinheit zur Verfügung stellen oder wir basteln noch an Feinheiten:

- Statusanzeige (damit der User sieht das der ftplister auch noch ausliest/ braucht bei großen Verzeichnissen recht lange)

- Option "Nur diesen Ordner auslesen" und " Diesen & Alle Unterordner auslesen"

Ansonsten ist es ein Glanzwerk !!!

Ich wünsche Dir jetzt erstmal einen schönen Urlaub, wir quasseln wenn du wieder da bist drüber.

P.S. Die .exe schiecke ich Dir gerne per PN wenn du möchtest.

EDIT:

Nochmal vielen Dank, Arbeitszeit der Umzugsaktion ca. 2 Stunden Ohne tool wohl ein paar mehr. ;)

Gruß Soidberg
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Einzelne Zeilen in txt Datei speichern und auslesen (7)

Frage von noah1400 zum Thema Batch & Shell ...

Webentwicklung
gelöst HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

PHP
gelöst HTML Dropdownmenü auslesen und in PHP als Variable übergeben (35)

Frage von ITFlori zum Thema PHP ...

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 ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...