成功同步目录后,WinSCP删除早于特定日期的特定文件夹中的源文件

时间:2019-01-02 11:31:42

标签: batch-file sftp winscp

我有一个批处理文件,可以使用WinSCP同步某个文件夹。

"C:\Program Files (x86)\WinSCP\WinSCP.com" ^
  /log="C:\Scripts\Logs\- Server Data - Backup !M-!D-!Y.log" ^
  /command ^
    "open ""sftp://xxx/Archive/Server Data/"" " ^
    "synchronize remote ""C:\xxx\- Server Data -\"" " ^
    "exit"

其背后的目的是将数据存档到Synology NAS SFTP服务器。效果很好。

我还希望删除源中特定子目录中超过某个日期(例如30天)的文件,但我想绝对确定它们已成功存档到SFTP服务器。

我有一个批处理文件,可以删除30天以上的日志文件,但是我认为这不是删除重要文件的安全方法。假设同步可能会在不通知我的情况下停止工作30天,例如,然后我被搞砸了。

ForFiles /p "C:\Scripts\Logs" /s /d -30 /c "cmd /c del @file"

此外,如果可以方便地编辑指定的子目录,以便我可以简单地在列表中添加或删除列表,那也很好。因此,我认为某种循环会很好。

最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

在开始删除文件之前,您可以test WinSCP exit code查看同步是否成功:

"C:\Program Files (x86)\WinSCP\WinSCP.com" ^
  /log="C:\Scripts\Logs\- Server Data - Backup !M-!D-!Y.log" ^
  /command ^
    "open ""sftp://xxx/Archive/Server Data/"" " ^
    "synchronize remote ""C:\xxx\- Server Data -\"" " ^
    "exit"

if not errrolevel 1 (
    ForFiles /p "C:\Scripts\Logs" /s /d -30 /c "cmd /c del @file"
)

请参阅WinSCP常见问题解答How do I know that script completed successfully?


要获得更强大的解决方案,您应该使用更强大的语言,例如PowerShell combined with WinSCP .NET assembly

您可以从此示例开始,该示例具有所需的所有关键片段(迭代本地文件,并检查它们是否远程存在):
Recursively move files in directory tree to SFTP server while preserving source directory structure