我有一个客户端应用程序,它可以修改文件共享上的数据文件。基本上每次应用程序运行时,我都想将数据文件备份到共享上的备份文件夹中。
不幸的是,客户端和网络共享之间的连接并不总是很好。人们通过 VPN 连接,执行常规文件复制可能需要很长时间。
我认为在网络共享之间复制文件的标准程序是将其从第一个网络共享复制到本地计算机,然后从那里复制到目标共享,即使两个共享相同,对吗? 有没有办法在服务器本身上启动文件复制?
它必须使用 SMB 客户端可用的标准命令,因为我无法控制文件服务器。
答案1
运行一个定期调用 robocopy 的计划任务。查看/MON:n
或/MOT:n
开关。
Repeated Copy Options
/MON:n : MONitor source; run again when more than n changes seen.
/MOT:m : MOnitor source; run again in m minutes Time, if changed.
每次运行计划任务时,如果文件发生更改,服务器将简单地复制文件。但是,如果配置文件损坏,您只会复制损坏的数据。太好了。
最好在 robocopy 之后对文件进行重命名,并在文件名中包含日期。这样,如果您发现某些事情发生了意外,您就会有文件历史记录。我相信以下内容将按日期重命名您的文件:ren myfile.foo myfile%date:~4,2%-%date:~7,2%-%date:~10%.foo
如果 Robocopy 复制文件没有问题,则返回 1。如果没有复制任何内容,则为零。
我将把批处理文件的逻辑留给读者作为练习(主要是因为我不擅长使用批处理文件)。
编辑
如果您无法访问服务器,那么您只需在 PC 上的计划任务中运行 Robocopy 脚本即可检查文件共享中是否有文件修改,然后如果检测到更改则复制它。由于客户端和服务器之间的连接不可靠,请查看/Z
Robocopy 的交换机。
/Z : Copy files in restartable mode (survive network glitch).
如果您想以某种方式通过客户端 PC 的触发器在服务器的 CPU 上运行备份……您将需要访问服务器,此时更好的选择 IMO 是使用此编辑上方的 Robocopy 概念。