BATch soll neuste Datei eines bestimmten Dateiy-Typs auf einem FTP-Server finden
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 196866
Url: https://administrator.de/contentid/196866
Ausgedruckt am: 22.11.2024 um 18:11 Uhr
10 Kommentare
Neuester Kommentar
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
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
Hallo pcklick,
abhängig davon, in welchem Format Dein FTP-Server seine Verzeichnislistings ausliefert, könnte das so gehen:
Das Script ist auf das folgende Format eines Verzeichnislistings ausgelegt:
Gruß
Friemler
abhängig davon, in welchem Format Dein FTP-Server seine Verzeichnislistings ausliefert, könnte das so gehen:
@echo off & setlocal
::Daten für die FTP-Verbindung
set "FTPServer=Server"
set "FTPUser=Username"
set "FTPPassword=Passwort"
set "FTPDir=/"
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% %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
::Aus dem Verzeichnislisting die Zeilen herausfiltern, die Dateien des gewünschten Typs enthalten
::Die Angaben zum Datum und den Dateinamen an das Unterprogramm ProcessFile übergeben
::Dessen Ausgaben werden in eine temporäre Datei umgeleitet
(for /f "tokens=6-8*" %%a in ('findstr /i /r /c:"^-.*\.%FTPFileType%$" "%FTPDirListing%" 2^>NUL') do (
call :ProcessFile %%c %%a %%b "%%d"
)) > "%FTPDirListing2%"
::Die im letzten Schritt erzeugte Datei mit SORT in absteigender Reihenfolge sortieren
::Dadurch steht die jüngste Datei in der ersten Zeile. Diese Zeile auslesen und dann Abbruch
for /f "tokens=3*" %%a in ('sort /r "%FTPDirListing2%" 2^>NUL') do (
set "NewestFile=%%b"
goto :ReadResultLoopBreak
)
:ReadResultLoopBreak
::Ergebnis ausgeben
echo.%NewestFile%
::Temporäre Dateien löschen
del "%FTPDirListing%"
del "%FTPDirListing2%"
del "%GetFTPDirListing%"
::Script Ende
exit /b 0
::Unterprogramm
::Erzeugung der 2-stelligen numerischen Darstellung eines Monatsnamens
:ProcessFile
set "MonthNames=Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"
set "MonthA=%2"
set /a MonthN=0
::Monatsnummer aus dem Namen ermitteln
for %%m in (%MonthNames%) do (
set /a MonthN+=1
if /i "%%m" equ "%MonthA%" goto :MapLoopBreak
)
:MapLoopBreak
::Aus der Monatsnummer die 2-stellige Darstellung erzeugen
set "MonthN=0%MonthN%"
set "MonthN=%MonthN:~-2%"
::Datum und Dateiname ausgeben
::Anschließend ein Zeilenumbruch
<NUL set /p "=%1 %MonthN% %3 %~4"
echo.
::Back to caller
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
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
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
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:
Gruß
Friemler
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
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:
Auf Deinem Desktop müsste danach eine Datei
Gruß
Friemler
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
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
Hallo,
wenn das wirklich die Antwort Deines FTP-Servers auf den Befehl
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
wenn das wirklich die Antwort Deines FTP-Servers auf den Befehl
ls -l
Evtl. lässt sich da was an der Konfiguration des FTP-Servers einstellen, das musst Du aber mit Deinem Hoster klären.
Gruß
Friemler