Sonstiges > Infrastruktur

Automatisiertes FTP-Backup für Windows 2003

<< < (2/3) > >>

MartinG:
Selber mache ich nur die andere Richtung, sprich täglich automatisierte Downloads mit automatischem entpacken per Batchdatei.

Eigentlich sehe ich keinen Grund wieso das aber nicht andersrum auch funktionieren sollte. Man kann eigentlich alle üblichen Packprogramme gut per Kommandozeile steuern.

Eine Beispielbatch von mir sieht z.B. so aus:

echo open ftpserver > ftp.tr
echo user username1 passwort >> ftp.tr
echo ascii >> ftp.tr
echo cd verzeichnisr >> ftp.tr
echo get teilekat.txt >> ftp.tr
echo close >> ftp.tr
echo quit >> ftp.tr

ftp -n -i -s:ftp.tr > log

Anstelle des get ein put und das müsste eigentlich alles gewesen sein...

MartinG:
Was ich noch vergessen habe: ein Verzeichnis mit dem aktuellen Datum zu erzeugen dürfte vermutlich etwas schwieriger sein. Aber wenn Du per Packer eine Zip-Datei mit z.B. archiv.bat erzeugst, kannst Du diese ja relativ easy per Batch wieder umbenennen...

FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=%%b%%c%%d
ren archiv.zip archiv%cdate%.zip

TMC:
Vielen Dank für die neuen Beiträge.

@Martin:
Deine vorgeschlagene Lösung ist mir am liebsten  ;) Denn mehr brauch ich ja gar nicht...
Klingt sinnvoll, und sollte so sicherlich funktionieren. Werde dann eine rar.exe mit einbinden für das packen.
Werde das im Detail noch testen, ich berichte natürlich dann, ob bzw. wie ich es hinbekommen habe.

Danke nochmal,
Matthias

TMC:
So, nun hab ich mich etwas mit Batch-Dateien auseinandergesetzt.
Größere Herausforderung war es, wie man das Datum im Format YYYY-MM-DD_HH-MM-SS bekommt, da time/s mir keine Sekunden zurückgab; Lösung siehe unten im Code.
Weiter hat rar.exe (aus WinRAR 3.42) ein Problem: wird eine Datei gerade benutzt, so kann es kein rar-Archiv daraus erstellen. Daher bin ich auf Info-ZIP ausgewichen.

Was ich noch überhaupt nicht weiß:
Ich setze mit SET Variablen. Scheinbar sind diese nach dem Schließen der DOS-Box nicht mehr gesetzt. Gibt es dafür eine Doku? Ich möchte ungern, dass z.B. das Passwort systemweit zur Verfügung steht, wenn die Batch-Datei ausgeführt wird. Muss ich ein "set FTP_PW=" machen, damit die Variable verschwindet, oder hat diese eh nur zur Laufzeit Gültigkeit?

Wie auch immer:
Unten der Code, wie es funktioniert. Es erfolgt ein FTP-Upload der ausgewählten Verzeichnis.

Für Verbesserungsvorschläge bin ich dankbar.

Matthias



--- Code: ---REM ****************************************************************************
REM Purpose: Upload files from harddisk to FTP. We zip the files being uploaded.
REM          Therefore Info-Zip is needed (http://www.info-zip.org/pub/infozip/)
REM ****************************************************************************


REM ============================================================================
REM Set environment variables
REM ============================================================================
REM FTP account settings
set FTP_SERVER=server.com
set FTP_USER=username
set FTP_PW=passwort

REM directory on FTP server where we put the files (without trailing "/")
set FTP_DIR=test
REM Which file or directory do we upload?
set FTP_UPLOAD=F:\DerPfad\
REM Log directory (without trailing "/")
set FTP_LOG=log
REM Our temporary directory (without trailing "/")
set OUR_TEMP=temp
REM Filename for ftp parameters
set FTP_PARAM=~ftppar.tmp

REM Where is the zip.exe located? We are using Info-ZIP: http://www.info-zip.org/pub/infozip/
REM   direct download: ftp://ftp.info-zip.org/pub/infozip/WIN32/zip231xN.zip
set ZIP_EXE=zip.exe


REM ============================================================================
REM Get current date/time in the format: YYYY-MM-DD_HH-MM-SS --> CURDATETIME
REM ============================================================================
REM Get current date in the format YYYY-MM-DD -> TMP_DATE
for /f "tokens=1,2,3 delims=/. " %%a in ('date /t') do set TMP_DATE=%%c-%%b-%%a
REM Current time -> TMP_TIME
if %Time:~0,2% gtr 9 (set TMP_HOURS=%Time:~0,2%) else set TMP_HOURS=0%Time:~1,1%
set TMP_MIN=%Time:~3,2%
set TMP_SEC=%Time:~6,2%
set TMP_TIME=%TMP_HOURS%-%TMP_MIN%-%TMP_SEC%
REM Put the result together
set CURDATETIME=%TMP_DATE%_%TMP_TIME%

REM ============================================================================
REM Let's create the zip file
REM ============================================================================
set ZIP_FILEPATHNAME=%OUR_TEMP%/backup_%CURDATETIME%.zip
%ZIP_EXE% -r %ZIP_FILEPATHNAME% %FTP_UPLOAD%

REM ============================================================================
REM Put the FTP parameters together
REM ============================================================================
echo open %FTP_SERVER% >> %OUR_TEMP%/%FTP_PARAM%
echo user %FTP_USER% %FTP_PW% >> %OUR_TEMP%/%FTP_PARAM%
REM Since we transfer zip-file, we need the transfer mode "binary" and not "ascii"
echo binary >> %OUR_TEMP%/%FTP_PARAM%
echo cd %FTP_DIR% >> %OUR_TEMP%/%FTP_PARAM%
echo put %ZIP_FILEPATHNAME% >> %OUR_TEMP%/%FTP_PARAM%
echo close >> %OUR_TEMP%/%FTP_PARAM%
echo quit >> %OUR_TEMP%/%FTP_PARAM%


REM ============================================================================
REM FTP
REM ============================================================================
ftp -n -i -s:%OUR_TEMP%/%FTP_PARAM% > %FTP_LOG%/ftp_%CURDATETIME%.log

REM ============================================================================
REM Cleanup temp
REM ============================================================================
rd %OUR_TEMP% /s /q
md %OUR_TEMP%


--- Ende Code ---

MartinG:
Finde ich eine sehr schöne Lösung Matthias, die einmal mehr zeigt was man mit Batchdateien für schöne Lösungen machen kann.

Im nachhinein wäre für Dich eine Lösung per VBS-Script vielleicht sogar noch einfacher gewesen (ich selber stehe damit eher auf Kriegsfuss, obwohl ich dies relativ häufig einsetze, aber leider meistens nur per paste & copy). Für Dich als Scripting-Chef wäre es vermutlich relativ easy gewesen...

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln