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

BATch soll neuste Datei eines bestimmten Dateiy-Typs auf einem FTP-Server finden

Frage Entwicklung Batch & Shell

Mitglied: pcklick

pcklick (Level 1) - Jetzt verbinden

12.01.2013 um 16:19 Uhr, 1975 Aufrufe, 10 Kommentare

Hey Leute,
folgendes Problem:
Ich möchte per Batch ein Backup, das auf meinem FTP Webspace liegt automatisch dowloaden. Den Pfad zum Ordner der .zip Dateien ist mir bekannt.
Ich weiss nur nicht, wie ich per .ftp-Datei ein Skript mache, dass die neuste .zip Datei abfrägt. Kann mir jemand helfen / einen Codeschnipsel empfehlen?

Vielen Dank für alle Bemühungen und Hilfen im Vorraus! :D
Mitglied: Dobby
12.01.2013 um 17:29 Uhr
Hallo pcklick,

lass das ein Script auf dem FTP Server machen!

Sonst läuft man schnell Gefahr, dass das jemand ausnutzt, von außerhalb über das Internet!
und wenn der dann erwischt wird, braucht er nur zu sagen er habe nichts böses gewollt und
hat sich mit seinem Script oder seiner Batch-Datei verschrieben!

Von mir aus auch zwei Scripte intern, eines guckt nach neuen Dateien und das andere wird dann erst aktiv wenn das erste etwas "neues" gefunden hat! Das hält den Code schlank und ist von außerhalb nicht aus zu
nutzen, respektive man kann auf Grund der besseren Übersicht Fehler schneller entdecken.

Gruß
Dobby
Bitte warten ..
Mitglied: Friemler
12.01.2013, aktualisiert 13.01.2013
Hallo pcklick,

abhängig davon, in welchem Format Dein FTP-Server seine Verzeichnislistings ausliefert, könnte das so gehen:
01.
@echo off & setlocal 
02.
 
03.
 
04.
::Daten für die FTP-Verbindung 
05.
set "FTPServer=Server" 
06.
set "FTPUser=Username" 
07.
set "FTPPassword=Passwort" 
08.
set "FTPDir=/" 
09.
set "FTPFileType=zip" 
10.
 
11.
::Pfade von temporären Dateien 
12.
set "GetFTPDirListing=%TEMP%\GetFTPDirListing.txt" 
13.
set "FTPDirListing=%TEMP%\FTPDirListing.txt" 
14.
set "FTPDirListing2=%TEMP%\FTPDirListing2.txt" 
15.
 
16.
 
17.
::Die temporäre Datei leeren, die das Verzeichnislisting aufnimmt 
18.
type NUL > "%FTPDirListing%" 
19.
 
20.
::FTP-Script in temporäre Datei schreiben 
21.
> "%GetFTPDirListing%" echo open %FTPServer% 
22.
>>"%GetFTPDirListing%" echo user %FTPUser% %FTPPassword% 
23.
>>"%GetFTPDirListing%" echo ascii 
24.
>>"%GetFTPDirListing%" echo cd "%FTPDir%" 
25.
>>"%GetFTPDirListing%" echo ls -l "%FTPDirListing%" 
26.
>>"%GetFTPDirListing%" echo bye 
27.
 
28.
::FTP-Script ausführen 
29.
::Das Verzeichnislisting wird dabei lokal in eine temporäre Datei geschrieben 
30.
ftp /inv /s:"%GetFTPDirListing%" > NUL 
31.
 
32.
 
33.
::Aus dem Verzeichnislisting die Zeilen herausfiltern, die Dateien des gewünschten Typs enthalten 
34.
::Die Angaben zum Datum und den Dateinamen an das Unterprogramm ProcessFile übergeben 
35.
::Dessen Ausgaben werden in eine temporäre Datei umgeleitet 
36.
(for /f "tokens=6-8*" %%a in ('findstr /i /r /c:"^-.*\.%FTPFileType%$" "%FTPDirListing%" 2^>NUL') do ( 
37.
   call :ProcessFile %%c %%a %%b "%%d" 
38.
)) > "%FTPDirListing2%" 
39.
 
40.
 
41.
::Die im letzten Schritt erzeugte Datei mit SORT in absteigender Reihenfolge sortieren 
42.
::Dadurch steht die jüngste Datei in der ersten Zeile. Diese Zeile auslesen und dann Abbruch 
43.
for /f "tokens=3*" %%a in ('sort /r "%FTPDirListing2%" 2^>NUL') do ( 
44.
  set "NewestFile=%%b" 
45.
  goto :ReadResultLoopBreak 
46.
47.
 
48.
:ReadResultLoopBreak 
49.
::Ergebnis ausgeben 
50.
echo.%NewestFile% 
51.
 
52.
 
53.
::Temporäre Dateien löschen 
54.
del "%FTPDirListing%" 
55.
del "%FTPDirListing2%" 
56.
del "%GetFTPDirListing%" 
57.
 
58.
::Script Ende 
59.
exit /b 0 
60.
 
61.
 
62.
 
63.
::Unterprogramm 
64.
::Erzeugung der 2-stelligen numerischen Darstellung eines Monatsnamens 
65.
:ProcessFile 
66.
  set "MonthNames=Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec" 
67.
  set "MonthA=%2" 
68.
  set /a MonthN=0 
69.
 
70.
  ::Monatsnummer aus dem Namen ermitteln 
71.
  for %%m in (%MonthNames%) do ( 
72.
    set /a MonthN+=1 
73.
    if /i "%%m" equ "%MonthA%" goto :MapLoopBreak 
74.
75.
 
76.
  :MapLoopBreak 
77.
  ::Aus der Monatsnummer die 2-stellige Darstellung erzeugen 
78.
  set "MonthN=0%MonthN%" 
79.
  set "MonthN=%MonthN:~-2%" 
80.
 
81.
  ::Datum und Dateiname ausgeben 
82.
  ::Anschließend ein Zeilenumbruch 
83.
  <NUL set /p "=%1 %MonthN% %3 %~4" 
84.
  echo. 
85.
 
86.
::Back to caller 
87.
exit /b 0
Das Script ist auf das folgende Format eines Verzeichnislistings ausgelegt:
-rw-r--r--    1 ftp      ftp         74610 Jun 06  2012 hist-deu.txt 
-rw-r--r--    1 ftp      ftp         28537 Oct 22  2010 hist-eng.txt 
-rw-r--r--    1 ftp      ftp          1468 Jul 27  2010 info-deu.txt 
-rw-r--r--    1 ftp      ftp          1672 Jul 27  2010 info-eng.txt 
dr-xr-xr-x   11 ftp      ftp          4096 Nov 28  2006 programs 
drwxr-xr-x    2 ftp      ftp          4096 Mar 11  2003 public 
dr-xr-xr-x   13 ftp      ftp          4096 Dec 08  2008 tools
Gruß
Friemler
Bitte warten ..
Mitglied: pcklick
12.01.2013 um 22:43 Uhr
Vielen lieben Dank! Da hast du dir echt Mühe gegeben. Trotzdem erhalte ich nach nur diesem Stück, den Fehler "Anmeldefehler":
@echo off & setlocal


::Daten für die FTP-Verbindung
set "FTPServer=ftp.pcklick.net"
set "FTPUser=w00ec0b6"
set "FTPPassword=XXXXXXXXXX"
set "FTPDir=/wordpress/wp-content/7bd31336c0-backups/"
set "FTPFileType=zip"

::Pfade von temporären Dateien
set "GetFTPDirListing=%TEMP%\GetFTPDirListing.txt"
set "FTPDirListing=%TEMP%\FTPDirListing.txt"
set "FTPDirListing2=%TEMP%\FTPDirListing2.txt"


::Die temporäre Datei leeren, die das Verzeichnislisting aufnimmt
type NUL > "%FTPDirListing%"

::FTP-Script in temporäre Datei schreiben
"%GetFTPDirListing%" echo open %FTPServer%
>>"%GetFTPDirListing%" echo user %FTPUser% pass %FTPPassword%
>>"%GetFTPDirListing%" echo ascii
>>"%GetFTPDirListing%" echo cd "%FTPDir%"
>>"%GetFTPDirListing%" echo ls -l "%FTPDirListing%"
>>"%GetFTPDirListing%" echo bye

::FTP-Script ausführen
::Das Verzeichnislisting wird dabei lokal in eine temporäre Datei geschrieben
ftp /inv /s:"%GetFTPDirListing%" > NUL
Stimmt das so? Oder muss ich noch etwas ausfüllen? Bzw. bearbeiten?
Danke für die Hilfe :D
Bitte warten ..
Mitglied: Friemler
13.01.2013 um 00:45 Uhr
Hallo pcklick,

es könnte sein, dass Du in Deinem Passwort irgendwelche Sonderzeichen verwendest. In welcher Codierung/mit welchem Editor hast Du das Script und damit auch Dein Passwort gespeichert? Teste auf jeden Fall mal Windows Notepad (Codierung ANSI bzw. Codepage Windows-1252) und z.B. Notepad++ oder Notepad2 (beide kostenlos) in der Codierung OEM850.

Gruß
Friemler
Bitte warten ..
Mitglied: pcklick
13.01.2013 um 11:21 Uhr
Ich nutze Notepad++
Das Passwort besteht nur aus Buchstaben und Zahlen... Was mache ich falsch? :D
Bitte warten ..
Mitglied: Friemler
13.01.2013, aktualisiert um 11:40 Uhr
Hallo pcklick,

ich hatte einen kleinen Bug in der Zeile für die Anmeldung am FTP-Server, ist bereits korrigiert.

Damit das Script funktioniert, muss das Verzeichnislisting so formatiert sein, wie in meinem Beispiel. Dabei kommt es auf die folgenden Faktoren an:

  • Die erste Spalte muss die Attributbits enthalten, bei Dateien muss die Zeile mit einem Minuszeichen beginnen.
  • Die Spalten 6 bis 8 enthalten das Dateidatum in der Reihenfolge Monatsname Tag Jahr.
  • Der Monatsname ist als englische Abkürzung angegeben.
  • In Spalte 9 steht der Dateiname.

Gruß
Friemler
Bitte warten ..
Mitglied: pcklick
13.01.2013 um 15:02 Uhr
Okay, die Anmeldung geht jetzt...
Doch ich würde die ermittelte Datei gern downloaden... Die Variable "%NewestFile%" zeigt mir nichts an?
Bitte warten ..
Mitglied: Friemler
13.01.2013, aktualisiert um 15:59 Uhr
Hallo,

Du meinst also, das Script zeigt Dir nichts an? Ich habe ja bereits mehrmals geschrieben, dass das Script auf ein gewisses Format des Verzeichnislistings angewiesen ist.

Starte bitte eine Konsole/Eingabeaufforderung und tippe folgende Kommandos ein:
cd /d "%UserProfile%\Desktop" 
ftp -n 
open ftp.pcklick.net 
user w00ec0b6 DeinPasswort 
ascii 
ls -l ftpdir.txt 
bye
Auf Deinem Desktop müsste danach eine Datei ftpdir.txt vorhanden sein. Poste bitte den Inhalt dieser Datei, damit ich das Script anpassen kann. Und benutze für das Posting bitte Code-Tags, ich brauche die unverfälschte Ausgabe!

Gruß
Friemler
Bitte warten ..
Mitglied: pcklick
13.01.2013 um 15:45 Uhr
Erstmal vielen Dank für die Hilfe!
Hier das Verzeichniss:

globaltechnews
drupal-7.12
WichtigerOrdnerNichtLöschen
wplounge
.
logs
Überreste1
usage
wordpress
neuste.bat
shop
infophp.php
..
Bitte warten ..
Mitglied: Friemler
13.01.2013 um 15:54 Uhr
Hallo,

wenn das wirklich die Antwort Deines FTP-Servers auf den Befehl
ls -l
ist, kann man Dir nicht helfen. Der Befehl liefert normalerweise die lange Version eines Verzeichnislistings, d.h. incl. Datumsangaben und Angaben zum Typ eines Eintrags (es kann ja ein Verzeichnis oder eine Datei sein). Ohne diese Angaben kann man natürlich auf dem lokalen Rechner nicht die neueste Datei im FTP-Verzeichnis ermitteln.

Evtl. lässt sich da was an der Konfiguration des FTP-Servers einstellen, das musst Du aber mit Deinem Hoster klären.

Gruß
Friemler
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(2)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst Per Batch FTP-Server Dateien ändern (1)

Frage von Marlon1 zum Thema Batch & Shell ...

Linux Tools
CURL mehrere Dateien vom ftp-Server herunterladen (10)

Frage von highpriest zum Thema Linux Tools ...

Batch & Shell
gelöst Ordner per Batch verschieben, Datei kopieren (2)

Frage von Shape.Shifter zum Thema Batch & Shell ...

Netzwerkmanagement
Zugriff auf FTP-Server durch Chrome in Windows 7 klappt nicht (3)

Frage von emilien2 zum Thema Netzwerkmanagement ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (10)

Frage von 1410640014 zum Thema Backup ...