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

Frage Entwicklung Batch & Shell

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

Mitglied: pcklick

pcklick (Level 1) - Jetzt verbinden

12.01.2013 um 16:19 Uhr, 2041 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: 108012
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 ..
Ähnliche Inhalte
Batch & Shell
Batch - IF - mehr als eine Datei eines bestimmten Typs
gelöst Frage von zimbosmurfBatch & Shell9 Kommentare

Hallo! Ich möchte in einer Batchdatei eine Datei eines bestimmten Typs verarbeiten. Hierfür hole ich mir mit for %%G ...

Batch & Shell
Batch: bestimmte Datei finden und den Ordner verschieben
gelöst Frage von Gari.onBatch & Shell9 Kommentare

Hallo! ich hoffe ich bin hier richtig, es geht um folgendes Problem: in einem Ordner liegen mehrere Unterordner mit ...

Batch & Shell
FTP Batch mit Semaphoren Datei
Frage von DirkK73Batch & Shell1 Kommentar

Hallo zusammen, ich bräuchte Eure Hilfe beim Erstellen eines Batches das folgende Aufgabe hat: Wir haben interne virtuelle Server. ...

Batch & Shell
Batch zum suchen bestimmter Dateien
gelöst Frage von FurycanBatch & Shell2 Kommentare

Hallo zusammen, ich hoffe man kann mir hier helfen. Ich Suche ein Script das mir folgendes macht: In einem ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 10 StundenLinux1 Kommentar

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 1 TagTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit24 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

Netzwerke
Packet loss bei "InternetLeitungsvollauslastung"
gelöst Frage von Freak-On-SiliconNetzwerke17 Kommentare

Servus; Ja der Titel klingt komisch, is aber so. Wenn die Internetleitung voll ausgelastet ist, hab ich extreme packet ...

Windows 10
Automatische daten kopieren, USB zu USB unter Win10 im Hintergrund
Frage von DerEisigeWindows 1016 Kommentare

Hallo Leute, ich bin auf der Suche nach einem Skript, dass von einem USB Stick automatisch nach dem einstecken ...