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 (http://www.info-zip.org/pub/infozip/) 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
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%
Danke für Eurer Feedback zu dem Script :) Ehrlich gesagt, war das mein erstes Batch-Script mit mehr als 4 Zeilen Code, aber eigentlich ist das alles sehr logisch, wenn man auch andere Programmiersprachen kann....
@Daniel:
Wirf mal hier den abschließenden Backslash raus:
set SOURCE_FOLDER1=D:\test\
Was ich bei Info-ZIP festgestellt habe: der muss weg, wenn man mehr als 1 Quell-Verzeichnis übergibt.
Du willst doch 2 Verzeichnisse übergeben, oder? Falls nicht, dann erkläre bitte mal, was Du machen willst...
Hat es mit Deinem Verzeichniswechsel "cd test" irgendwas auf sich, oder ist das nur so reingerutscht?