Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Soidberg

Soidberg (Level 1) - Jetzt verbinden

21.07.2007, aktualisiert 18.10.2012, 6463 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 https://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 ..
Ähnliche Inhalte
Microsoft

Batchdatei: Dateien nach String durchsuchen, Dateinamen in .txt speichern

gelöst Frage von elcheffe123Microsoft22 Kommentare

Ahoi! Der Titel sagt eigentlich schon alles. Ich möchte eine Batchdatei schreiben, die im aktuellen Ordner( unbekannte anzahl an ...

HTML

HTML-Formular: User-Eingabe in .txt-Datei speichern?

Frage von SchelinhoHTML2 Kommentare

Hallo community! Ich habe folgendes Anliegen: Ist es möglich, ohne PHP oder sonst was verwenden zu müssen, die Eingaben, ...

Batch & Shell

Dateinamen mit vbs auslesen und in eine TXT Datei schreiben

gelöst Frage von KeiosIDBatch & Shell5 Kommentare

Hallo, ich hoffe mal, das ist das richtige Unterforum. Nach diversen suchen und Hilfe aus einem Windows Scripting Buch ...

Batch & Shell

Einzelne Zeilen in txt Datei speichern und auslesen

gelöst Frage von noah1400Batch & Shell7 Kommentare

Liebe Forum-Mitglieder Ich habe da so eine Frage: Ich bin gerade dabei ein PW abfrage mit Batch zu machen. ...

Neue Wissensbeiträge
Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 7 StundenSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 12 StundenWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Microsoft Office

MS Office 2019 ohne OneNote - OneNote App speichert nur in Cloud

Information von Deepsys vor 23 StundenMicrosoft Office3 Kommentare

Microsoft zeigt deutlich wohin alles bei Ihnen geht, OneNote 2019 wird es nicht mehr geben, und die Windows 10 ...

Humor (lol)

Warum man sein Gast-WLAN nicht beliebig nennen sollte

Erfahrungsbericht von Henere vor 2 TagenHumor (lol)5 Kommentare

Servus, mal was aus dem Alltag. Zu Hause. Eigentlich wollte ich nur einen weiteren WLAN-AP ins Netz bringen, damit ...

Heiß diskutierte Inhalte
Windows Netzwerk
LAN nur 10MB pro s trotz gb lan
Frage von tsunamiWindows Netzwerk21 Kommentare

Hallo zusammen, ich brauche mal wieder einen Anstoß in die richtige Richtung. Ich habe einen Windows 10 pc mit ...

Festplatten, SSD, Raid
Server SSD: NVMe PCIe 3.0 RAID?
Frage von bouneeFestplatten, SSD, Raid15 Kommentare

Hallo liebe Admins, mir stellt sich gerade die Frage, ob ein neuer Server mit SSD NVMe PCIe 3.0 Sinn ...

Sonstige Systeme
Wie Normenkataloge im Unternehmen bereit stellen?
Frage von MuzzepuckelSonstige Systeme14 Kommentare

Hallo Kollegen, ich lese schon lange hier mit, nun mein ersrer Beitrag, bzw. Frage. :-) Wir benötigen für unsere ...

Windows 10
Windows 10 Startmenü-Einstellungen Systemweit festlegen
Frage von flotautWindows 1013 Kommentare

Guten Morgen liebe Admins, wir möchten bei uns am Lehrstuhl demnächst auf Windows 10 umsteigen. Wir installieren unsere PC's ...