﻿Dateien per FTP kopieren (FtpCopy und FtpRefresh)
=================================================

"FtpCopy" und "FtpRefresh" sind Programme zum Kopieren von Dateien per FTP. Sie 
sind insbesondere nützlich für oft wiederkehrende Vorgänge, z.B. Kopieren 
bestimmter Dateien auf einen Webserver nach einer Aktualisierung. 

Mit "FtpCopy" können verschiedene Kopier-Aufgaben unter frei wählbaren Namen 
konfiguriert werden. Eine solche Aufgabe kann interaktiv über das Windows-
Benutzerinterface oder auch über die Befehlszeile gestartet werden. Letzteres 
ermöglicht es, das Programm in eine Batch-Datei einzubinden oder einen 
Kopiervorgang über eine Desktop-Verknüpfung zu starten.

Das Konsolenprogramm "FtpRefresh" ist besonders für die Verwendung in 
Batch-Skripten geeignet (siehe unten).

Konfiguration einer Aufgabe:
---------------------------
Zum Erstellen einer Aufgabe klickt man auf die zugehörige Schaltfläche oben rechts
und gibt einen eindeutigen Namen für die Aufagbe an. Anschließend wählt man das 
Quellverzeichnis mit den zu kopierenden Dateien aus.

Für die Auswahl der zu kopierenden Dateien aus diesem Verzeichnis gibt es zwei 
Möglichkeiten, die auch kombiniert werden können:
1. Direkte Auswahl einer oder mehrerer Dateien
2. Angabe eines Dateifilters (z.B. *.zip) 

Außerdem können ein oder auch mehrere durch Kommas voneinander getrennte 
Filterausdrücke angebeben werden, über die alle zum Muster passenden Dateinamen 
ausgeschlossen werden (z.B. ~*.html).

Nach einem Klick auf die Schaltfläche unten rechts neben dem FTP-Verzeichnis
können die für den FTP-Transfer nötigen Angaben gemacht werden: 
Server, Port, entferntes Verzeichnis, Benutzername, Kennwort, etc.

Wird nur eine einzelne Datei zur Kopie ausgewählt, kann für diese optional
eine automatische Umbenennung vorgenommen werden.

Außerdem kann noch angegeben werden, ob alle, nur ältere oder nur auf dem 
FTP-Server noch nicht vorhandene Dateien überschrieben werden sollen.

Hinweise zur sicheren FTP-Verbindung:
-------------------------------------
Wenn eine sichere Verbindung per FTPS für den Transfer verwendet werden soll,
müssen geeignete Zertifikate eingebunden werden. Dies geschieht über die Datei
"certfiles.cfg", die beim Start des Programms geladen wird. Die angegebenen 
Dateien müssen sich im Installationsverzeichnis des Programms befinden.

Beispiel für "certfiles.cfg":
[certificate]
RootCertFile = root.pem
CertFile     = cert.crt
KeyFile      = key.key
SSLPassword  = password

Die erforderlichen Zertifikats-Dateien können mit OpenSSL erstellt werden. Die
Textdatei "cert.cnf" enthält die erforderlichen Voreinstellungen, siehe dazu die
Dokumentation zu OpenSSL:
https://www.openssl.org/docs/manmaster/man5/config.html

Vorlage für eine Konfigurationsdatei:
https://github.com/openssl/openssl/blob/master/apps/openssl.cnf

Beispiel für eine passende Batch-Datei:
openssl genrsa -des3 -out root.pem 1024
openssl req -config cert.cnf -new -out cert.csr
openssl rsa -in root.pem -out key.key
openssl x509 -in cert.csr -out cert.crt -req -signkey key.key -days 730

Speicherung der Einstellungen:
------------------------------
Alle Einstellungen werden in der Datei "FtpCopy.ini" im Verzeichnis "Anwendungsdaten
des Benutzers" gespeichert. Kennwörter werden dort verschlüsselt abgelegt.

Anlegen einer Desktop-Verknüpfung
---------------------------------
Durch Klick auf die Schaltfläche unten in der Mitte wird auf dem Desktop eine 
Verknüpfung für den ausgewählten Aufgabe angelegt. Durch Doppelklick auf das
Desktop-Symbol wird die Kopier-Aufgabe mit den gewählten Einstellungen
sofort ausgeführt.

Befehlszeilenoptionen für FtpCopy:
----------------------------------
Für den Aufruf aus einer Batch-Datei (oder auch über den Befehl "Ausführen" im
Windows-Startmenü) stehen folgende Befehlszeilenoptionen zur Verfügung.
Programmaufruf: FtpCopy <Aufgabe> [Optionen]
  <Aufgabe> - Name der Kopieraufgabe (siehe oben)
              Enthält der Name Leerzeichen, muss er durch Anführungszeichen
              umschlossen sein.
  Optionen  - Werden keine Optionen angegeben, öffnet sich das Programmfenster
              mit der in dem Aufruf enthaltenen Aufgabe
    /force  - Die in dem Aufruf enthaltene Aufgabe wird sofort ausgeführt
    /continue - Das Status-Fenster wird nach dem Transfer automatisch geschlossen
    /ini:<Name> - Abweichend von der o.g. Ini-Datei kann eine beliebige andere
              Datei für die Einstellungen ausgewählt werden.
Hinweis: "FtpCopy "ist eine GUI-Anwendung und zeigt den Fortschritt der Operationen
in einem Popup-Fenster an. 


Befehlszeilenoptionen für FtpRefresh:
-------------------------------------
"FtpRefresh" ist ein Konsolenprogramm, das die Einstellungen aus "FtpCopy" lädt
(Ini-Datei) und die Dateien entsprechend der angegeben Aufgabe kopiert.
Die Ausgabe des Fortschritts der Operationen erfolgt direkt in das Fenster der 
Eingabeaufforderung, so dass es insbesondere für die Verwendung in Batch-Skripten
geeignet ist. Außerdem können in einer Zeile mehrere Aufgaben angegeben 
werden. Es stehen folgende Befehlszeilenoptionen zur Verfügung.

Programmaufruf: FtpRefresh <Aufgabe1> <Aufgabe2> ... [Optionen]
  <Aufgabe#> - Name der Kopieraufgabe (siehe oben)
               Enthält der Name Leerzeichen, muss er durch Anführungszeichen
               umschlossen sein.
  Optionen:
    /ini:<Name> - Angabe einer vbon der Standardvorgabe (s.o.) abweichenden Ini-Datei 
    /log        - FTP-Kommunikationsprotokoll schreiben (z.B. bei der Fehlersuche)
                  Bsp.: /log:%TEMP%\FtpRefresh.log

Das Programm gibt nach Beendigung einen Fehlercode (Exit-Code) an die aufrufende
Anwendung zurück. Dieser kann in einer Batch-Datei über die Variable ErrorLevel 
abgefragt werden:
  = 0 : Es wurden mehrere Dateien kopiert
  = 1 : Es wurden keine Dateien kopiert
  
Datei-Modus:   FtpRefresh /file  <Aufgabe> <Datei1> <Datei2>... [Optionen]
Zunächst werden alle Dateien kopiert, die in der Aufgabe (s.o.) eingetragen sind.
Anschließend werden in das gleiche FTP-Verzeichnis auch noch die weiteren angegebenen
Dateien (<Datei1> <Datei2>...) kopiert.

              
J. Rathlev, September 2022            

