uwe.name
Goto Top

WinScp nach erfolgreicher Datenübertragung batch auslösen

Glück Auf,

Auf einen externen Server werden Daten bereitsgestellt, die via Winscp (Script) automatisch abgeholt werden, in einen Ordner "Arbeit" und in einen weiteren Ordner "Sicherung" kopiert und dann auf den externen Server gelöscht werden.

Das funktioniert auch alles Super. Nun möchte ich aber eine Mail haben, die den Vorgang mir bestätigt. Das habe ich mittels blat.exe gelöst, hier wird geprüft ob im Ordner "Arbeit" eine Datei liegt, wenn dann bekomme ich eine Mail, auch gut so und richtig.

Nun aber mein Problem: Über Server Aufgabenplanung wird die Batchdatei aller 15 Minuten aufgerufen. Wenn ich aber nicht gleich die Datei aus dem Ordner "Arbeit" nehme zur Weiterverarbeitung (lösche) bekomme ich aller 15 Minuten eine Mail.

Ausführen aller 15 Minuten notewendig, da kann nix geändert werden.

Meine Frage, gibt es ein Event bei WinScp, dass den Kopiervorgang erfolgreich bestätigt und wenn nichts kopiert wird weil noch keine Neue Datei auf den externen Server liegt nix macht ?

Batch was aller 15 Minuten aufgerufen wird:
cd C:\Program Files (x86)\WinSCP
winscp.exe xyz@0815 /privatekey="xxxxxx-xxx.ppk" /console /command "option batch on" "option confirm off"  "get RPT**************.txt \\192.168.1.211\pant\DBF01\Transaktionen_TC\" "get RPT**************.txt q:\Daten\sicher_Import\" "rm RPT**************.txt"    
rem Aufruf Mail senden
call 1-mail.cmd
c:
cd c:\windows\system32

Content-Key: 220900

Url: https://administrator.de/contentid/220900

Printed on: April 24, 2024 at 17:04 o'clock

Member: colinardo
colinardo Oct 31, 2013 updated at 16:54:28 (UTC)
Goto Top
Hallo uwe.name,
du könntest es so lösen: Du checkst nach der WinScp-Übertragung das Verzeichnis "Arbeit" auf vorhandensein von Dateien, wenn es welche gibt werden die in der Batch in ein anderes Verzeichnis verschoben und du via Mail benachrichtigt, andernfalls wenn keine Datei im Verzeichnis ist wird keine Mail verschickt.
Beispiel wie du es umsetzen könntest:
for /f %%a IN ('dir /b "c:\Arbeit" ^| find /c /v ""') DO @(  
  if %%a GTR 0 (
    rem Aufruf Mail senden und Dateien in anderes Verzeichnis verschieben
    call 1-mail.cmd
    move "c:\Arbeit\*.*" "C:\ToDo\"  
  ) else (
    REM keine neuen Dateien vorhanden
  )
)

Alternativ probiere es wie @rubberman schreibt, aber ich selber hatte je nach FTP-Server mit dieser Methode vor einiger Zeit unterschiedliche Ergebnisse, d.h. WinSCP hatte nicht immer den ExitCode 1 wenn nichts kopiert wurde; wenns aber bei deinem Server klappt ist das natürlich einfacher.


Grüße Uwe
Member: rubberman
rubberman Oct 31, 2013 at 16:40:45 (UTC)
Goto Top
Hallo uwe.name,

Kenne WinScp nicht, aber möglicherweise wird ein ERRORLEVEL-Wert gesetzt.
Siehe winscp.net/eng/docs/faq_script_result
Wenn ich es richtig verstanden habe sollte WinScp fehlschlagen wenn nichts kopiert wird? In dem Fall soll keine Mail gesendet werden?
Dann schreibe als Zeile 3
if errorlevel 1 exit /b
Grüße
rubberman
Member: uwe.name
uwe.name Oct 31, 2013 updated at 17:11:30 (UTC)
Goto Top
Glück Auf colinardo,


eigentlich hast Du mir die Lösung in deinem Text gesagt, einen Ordner für das Zwischkopieren, der Geprüft wird, datei vorhanden dann verschieben und Mail senden.

Danke

Sollte es aber im WinSCP noch eine Lösung geben dann Bitte