目录同步成功后,WinSCP 删除特定文件夹中早于特定日期的源文件
WinSCP delete source files in specific folders older than certain date, after successful Synchronization of directory
我有一个使用 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"
此外,如果指定的子目录可以轻松编辑,以便我可以简单地添加到列表或从列表中删除,那就太好了。所以我认为某种循环会很好。
最好的方法是什么?
您可以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.
我有一个使用 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"
此外,如果指定的子目录可以轻松编辑,以便我可以简单地添加到列表或从列表中删除,那就太好了。所以我认为某种循环会很好。
最好的方法是什么?
您可以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.