XhellsingX Geschrieben 5. März 2010 Geschrieben 5. März 2010 Hi, Ich habe hier ein Script, dieses sorgt dafür das ein SFTP Server sich von einem Anderen Rechner eine Datei holt. Dies soll nun aber nichtmehr geschehen, nun soll ein FTP-Server diese Datei an den SFTP-Server schicken. Leider blick ich da nicht ganz durch und hoffe das ihr mir helfen könnt =) Hier der Code: :: Batch-Datei zum Abruf von CAS-Dateien auf :: einem SFTP-Server, und nach Erfolg die :: Remote-Dateien in ein Backup-Verzeichnis :: verschieben. @ECHO OFF :: Anpassbare Settings SET ip_address=192.168.140.181 SET login_name=User01 SET password=1234 SET log_dir=.\LOG SET save_dir_main=G:\FTP-Abruf\FTP-Sandbox\Local SET server_backup=Backup SET server_output=Output SET cas_dat_wildcard=CAS*.dat :: Falls notwendig ein Log-Verzeichnis erstellen IF NOT EXIST %log_dir% MD %log_dir% :: Log-Datei definieren :: Zu Beginn Standardmässig die 0 zwischen Datum und Zeit Stellen SET logfile=.\LOG\LOG_%date:~6,4%%date:~3,2%%date:~0,2%0%time:~1,1%%time:~3,2%%time:~6,2%.LOG :: Dann überprüfen ob die die Stunde bei der Uhrzeit zweistellig ist IF %time:~0,2% GEQ 10 SET logfile=.\LOG\LOG_%date:~6,4%%date:~3,2%%date:~0,2%%time:~0,2%%time:~3,2%%time:~6,2%.LOG :: ALARM-Datei definieren SET alertfile=.\alert.txt :: Falls notwendig ein Temp-Verzeichnis im Save-Verzeichnis erzeugen SET save_dir_temp=%save_dir_main%\Temp IF NOT EXIST %save_dir_temp% MD %save_dir_temp%>> %logfile% :: Kopfzeile ECHO %date:~0,10% %time:~0,8%;********************************************************************************>> %logfile% ECHO %date:~0,10% %time:~0,8%;* Abruf vom %date:~0,10% um %time:~0,8% *>> %logfile% ECHO %date:~0,10% %time:~0,8%;********************************************************************************>> %logfile% :: Zeige Presets an ECHO %date:~0,10% %time:~0,8%;IP-Adresse : %ip_address%>> %logfile% ECHO %date:~0,10% %time:~0,8%;Login-Name : %login_name%>> %logfile% ECHO %date:~0,10% %time:~0,8%;Passwort : %password%>> %logfile% ECHO %date:~0,10% %time:~0,8%;Save-Dir Main : %save_dir_main%>> %logfile% ECHO %date:~0,10% %time:~0,8%;Save-Dir Temp : %save_dir_temp%>> %logfile% ECHO %date:~0,10% %time:~0,8%;FTP-Backup-Dir : %server_backup%>> %logfile% ECHO %date:~0,10% %time:~0,8%;FTP-Icoming-Dir : %server_output%>> %logfile% ECHO %date:~0,10% %time:~0,8%;CAS-DAT-Wildcard: %cas_dat_wildcard%>> %logfile% :: ########################################################################################## :: # Schritt 1: Überprüfen ob eine alert.txt - Datei existiert :: # Wenn ja dann BATCH abbrechen, ansonsten normal weiter. Damit soll Erzwungen werden das sich ein Administrator der Sache annnimmt. :: # Die alert.txt wird erzeugt falls ein Warning (z.B. Permission denied) auftritt, welche evtl. zu einem Dateiverlust führen kann. :: ########################################################################################## IF NOT EXIST alert.txt GOTO NoAlertFile ECHO %date:~0,10% %time:~0,8%;Datei alert.txt gefunden. BATCH-Abbruch!>> %logfile% GOTO End : NoAlertFile :: Überprüfe ob ein ftp_getfiles-Script existiert um es evtl. zu löschen IF EXIST ftp_getfiles.dat DEL ftp_getfiles.dat>> %logfile% IF NOT ERRORLEVEL 1 GOTO DelGetFilesScrSuccess IF ERRORLEVEL 1 ECHO %date:~0,10% %time:~0,8%;Script "ftp_getfiles.dat" konnte NICHT gelöscht werden!>> %logfile% GOTO End : DelGetFilesScrSuccess ECHO %date:~0,10% %time:~0,8%;Script "ftp_getfiles.dat" wurde erfolgreich gelöscht.>> %logfile% :: ########################################################################################## :: # Schritt 2: a) Verschieben der Remote-Dateien auf dem Server von dem Outgoing-Verzeichnis in den Root für die FTP-Uebertragung :: # Uebertragung der Dateien aus dem Server-Root auf den Client (FTP-GET) :: # Dies wird insgesamt maximal dreimal versucht. :: ########################################################################################## :: Erzeuge ein neues "ftp_getfiles.dat" ECHO a>> ftp_getfiles.dat ECHO %password%>> ftp_getfiles.dat ECHO mv ./%server_output%/%cas_dat_wildcard% ./>> ftp_getfiles.dat ECHO lcd %save_dir_temp%>> ftp_getfiles.dat ECHO get %cas_dat_wildcard%>> ftp_getfiles.dat ECHO mv %cas_dat_wildcard% ./%server_backup%>> ftp_getfiles.dat :: Öffne Verbindung zum SFTP-Server und Starte "ftp_getfiles.dat" - Versuch 1 ECHO %date:~0,10% %time:~0,8%;Dateien von FTP-Server übertragen: Versuch 01>> %logfile% sftpc %login_name%@%ip_address% < ftp_getfiles.dat>> %logfile% :: psftp %ip_address% -l %login_name% -pw %password% -b ftp_getfiles.dat -bc -batch >> %logfile% IF NOT ERRORLEVEL 1 GOTO GetFilesScrSuccess IF ERRORLEVEL 1 ECHO %date:~0,10% %time:~0,8%;Dateien wurden NICHT erfolgreich vom FTP-Server übertragen!>> %logfile% :: Öffne Verbindung zum SFTP-Server und Starte "ftp_getfiles.dat" - Versuch 2 ECHO %date:~0,10% %time:~0,8%;Dateien von FTP-Server übertragen: Versuch 02>> %logfile% sftpc %login_name%@%ip_address% < ftp_getfiles.dat>> %logfile% ::psftp %ip_address% -l %login_name% -pw %password% -b ftp_getfiles.dat -bc -batch >> %logfile% IF NOT ERRORLEVEL 1 GOTO GetFilesScrSuccess IF ERRORLEVEL 1 ECHO %date:~0,10% %time:~0,8%;Dateien wurden NICHT erfolgreich vom FTP-Server übertragen!>> %logfile% :: Öffne Verbindung zum SFTP-Server und Starte "ftp_getfiles.dat" - Versuch 3 ECHO %date:~0,10% %time:~0,8%;Dateien von FTP-Server übertragen: Versuch 03>> %logfile% sftpc %login_name%@%ip_address% < ftp_getfiles.dat>> %logfile% ::psftp %ip_address% -l %login_name% -pw %password% -b ftp_getfiles.dat -bc -batch >> %logfile% IF NOT ERRORLEVEL 1 GOTO GetFilesScrSuccess IF ERRORLEVEL 1 ECHO %date:~0,10% %time:~0,8%;Dateien wurden NICHT erfolgreich vom FTP-Server übertragen!>> %logfile% GOTO End : GetFilesScrSuccess ECHO %date:~0,10% %time:~0,8%;Daten wurden erfolgreich vom FTP-Server übertragen!>> %logfile% :: ########################################################################################## :: # Schritt 3: Bei einem Erfolg -> Aktuelle LOG-Datei nach einem "Warning" durchsuchen :: # Wenn kein Warning gefunden wurde, da geht der BATCH ganz normal weiter. :: # Sollte ein Warning in der LOG-Datei vorkommen, dann wird eine "alert.txt" erzeugt und der BATCH wird abgebrochen :: ########################################################################################## FIND %logfile% "Warning" >> %logfile% IF ERRORLEVEL 1 GOTO NoWarningFound IF NOT ERRORLEVEL 1 ECHO %date:~0,10% %time:~0,8%;Es wurde mindestens 1 "Warning" in %logfile% gefunden!>> %logfile% FIND %logfile% "Warning" >> %alertfile% GOTO End : NoWarningFound ECHO %date:~0,10% %time:~0,8%;Kein "Warning" in %logfile% gefunden!>> %logfile% :: ########################################################################################## :: # Schritt 3: Bei einem Erfolg -> Dateien aus dem Temp-Vereichnis in das offizielle Verzeichnis verschieben :: ########################################################################################## :: Überprüfen ob Dateien im TEMP-Veichnis vorhanden sind SET count=0 FOR %%i IN (%save_dir_temp%\%cas_dat_wildcard%) DO SET /a count+=1 IF NOT "%count%"=="0" GOTO LookForFileSuccess IF "%count%"=="0" ECHO %date:~0,10% %time:~0,8%;KEINE gültigen Dateien im TEMP-Verzeichnis vorhanden!>> %logfile% GOTO End : LookForFileSuccess ECHO %date:~0,10% %time:~0,8%;Gültige Dateien im TEMP-Verzeichnis vorhanden!>> %logfile% :: Dateien aus dem Temp-Verzeichnis in das Save-Verzeichnis verschieben (mit UnterdrÂckung der Best„ttigungsaufforderung) MOVE %save_dir_temp%\%cas_dat_wildcard% %save_dir_main% >> %logfile% IF NOT ERRORLEVEL 1 GOTO MoveFilesSuccess IF ERRORLEVEL 1 ECHO %date:~0,10% %time:~0,8%;Dateien wurden NICHT erfolgreich vom TEMP ins SAVE verschoben!>> %logfile% GOTO End : MoveFilesSuccess ECHO %date:~0,10% %time:~0,8%;Dateien wurden erfolgreich vom TEMP ins SAVE verschoben.>> %logfile% : End :: Kopfzeile ECHO %date:~0,10% %time:~0,8%;********************************************************************************>> %logfile% ECHO %date:~0,10% %time:~0,8%;* GetFiles BATCH abgeschlossen! *>> %logfile% ECHO %date:~0,10% %time:~0,8%;********************************************************************************>> %logfile% [/code] Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.