我有一个批处理文件,可以使用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"
此外,如果可以方便地编辑指定的子目录,以便我可以简单地在列表中添加或删除列表,那也很好。因此,我认为某种循环会很好。
最好的方法是什么?
答案 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。