Laden Sie mit WinSCP nur die neueste Datei hoch

15998
molecule

Ich bin bei WinSCP ziemlich neu. Ich würde gerne wissen, ob diese Anwendung es mir erlaubt, nur die zuletzt geänderte Datei in einem lokalen Verzeichnis an ein entferntes Verzeichnis zu senden. Bitte beachten Sie, dass die Inhalte in beiden Ordnern zu keinem Zeitpunkt übereinstimmen. Daher ist das Synchronisieren keine Option.

Es ist mir gelungen, eine Verbindung herzustellen und eine Datei auf den Server "zu legen". Ich kann jedoch nicht herausfinden, wie ich das erreichen kann, was ich erreichen möchte.

Hier sind meine Befehle ...

winscp.exe /console /command "option batch on" "open ftp://user:pass@remoteip:port -explicitssl -passive" "put c:\files\Completed /Test" "exit" /log=c:\winscp_log.txt

Jede Hilfe wird sehr geschätzt ...

2
Siehe WinSCP-Beispiel [Hochladen der neuesten Datei] (https://winscp.net/ger/docs/script_upload_most_recent_file). Martin Prikryl vor 8 Jahren 0

2 Antworten auf die Frage

3
shf301

Mit WinScp allein können Sie das nicht. Die Skripte sind nicht so komplex. Sie müssen eine andere Skriptsprache verwenden, um die neueste Datei zu erhalten.

Zum Beispiel diese Batchdatei:

@echo off  for /f "delims=" %%i in ('dir /b /od c:\files\Completed\*') do set LastFile=%%i  winscp.exe /console /command "option batch on" "open ftp://user:pass@remoteip:port -explicitssl -passive" "put c:\files\Completed\%LastFile% /Test" "exit" /log=c:\winscp_log.txt 
@ shf301 - hi, das ist ein sehr nützlicher Tipp. Im Moment glaube ich, dass es genau das tut, was es tun soll. Die LastFile-Variable scheint jedoch nicht den gesamten Dateinamen zu erfassen, wenn sie Leerzeichen enthält. Entschuldigen Sie meine Unwissenheit, aber wie kann ich sie ändern, um die Leerzeichen im Dateinamen zu erfassen? Der Protokollfehler des winscp-Protokolls besagt: "Das System kann die angegebene Datei" c: \ files \ Completed \ Copy "nicht finden. Der tatsächliche Dateiname lautet jedoch" c: \ files \ Completed \ Copy von text.txt ". Wenn Sie mir zeigen könnten, wie das geht, dann schätzen Sie es die "for" -Zeile manipulieren molecule vor 13 Jahren 0
Ich habe meine Antwort aktualisiert. Standardmäßig werden für Leerzeichen Leerzeichen verwendet. Wenn Sie die Trennzeichen auf nichts setzen ("delims ="), wird der Dateiname nicht aufgeteilt. shf301 vor 13 Jahren 0
@ shf301 - vielen Dank. Das funktionierte genau so, wie ich es einrichten wollte. Schätze deine Hilfe. Wenn es nicht zu viel verlangt, habe ich ein weiteres Skriptproblem, bei dem ich Sie um Hilfe bitten möchte. Ich möchte nicht unhöflich sein und es hier einfügen, bevor ich fragte, ob Sie bereit wären, einen Blick darauf zu werfen :) Bitte lassen Sie es mich wissen. Vielen Dank! molecule vor 13 Jahren 0
@ shf301 - entschuldige meine Unwissenheit, aber was macht das %% ich? Wenn ich @echo entferne, sehe ich tatsächlich, dass% i übergeben wird. Grund: Ich frage, wenn ich das Skript auf einer anderen Maschine ausprobiere, behält die for-Schleife den Dateinamen nicht bei, wie er auf meinem PC funktioniert. Das "for" sieht immer noch so aus, als würde es die Leerzeichen aufteilen und sie nicht erkennen. molecule vor 13 Jahren 0
Das %% i ist die Variable. Variablen in Batchdateien beginnen immer mit einem%. Der Batch-Prozess wird einmal entfernt, sodass die for-Schleife nur ein einziges% sieht. Ich bin nicht sicher, warum es nicht funktioniert. shf301 vor 13 Jahren 1
@ shf301 - Sieht aus wie wenn ich denselben Befehl auf die andere Maschine stelle - ich sehe LastFile = dir / b / od c: \ files \ Completed \ * anstelle von LastFile = filename.ext molecule vor 13 Jahren 0
Danke für diese Lösung. Ich habe es wiederverwendet (mit entsprechendem Kredit; und einigen Verbesserungen) für die WinSCP-Dokumentation: [Neueste Datei hochladen] (http://winscp.net/ger/docs/script_upload_most_recent_file#using_winscp_scripting) Martin Prikryl vor 9 Jahren 0
2
Martin Prikryl

WinSCP- putBefehl hat den -latestSchalter:

put -latest c:\files\Completed\* /Test/ 

Weitere Informationen finden Sie im WinSCP-Artikel Hochladen der neuesten Datei .