让Dropbox准实时同步文件(定时重启法)

到现在可选择的网盘产品已经很多,老牌的Dropbox一直没发布什么激动人心的新功能,而且依然承受着GFW的污染,可我偏偏还是对它情有独钟,这也许是一种爱受虐的贱,也许是种念旧,也许是种怕麻烦。

不管如何,现在比以前还是好多了,起码能https访问web、能实时上传,就差一个云端文件更新后客户端自动同步功能,经常不得已人肉重启进程来触发更新。原因在《解决Dropbox中国无法及时自动同步的问题》中有解释,也提供了一种解决办法,但它的要求比较高,找不到公共机器的话就得在每台终端机上都自建一个Python的Web服务,又涉及端口占用、修改Host、隐藏到后台什么麻烦。

相比起来重启Dropbox进程触发更新是一种比较野蛮但更简单有效的方式,要灵活的话可以人肉重启,要省事的话可以定时重启。按照一懒到底的习惯,写了一个全自动化的VBS脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
'''''''''''''''''''''''''''
'Dropbox定时重启脚本
'
'由于Dropbox的文件更新通知使用的http服务被GFW限制不可用,须要重启Dropbox进程才能触发获取文件的更新。
'特编写此脚本自动进行定时重启操作,运行后添加一项Windows定时任务,每隔指定的时间重启Dropbox.exe
'''''''''''''''''''''''''''

'在这里设定重启的间隔时间
'如果只想立即重启Dropbox,不想要定时执行,则把它配置为0
interval = 30

''''''''''''''''''''''''''''''''''''''''''''
Set fso = CreateObject("Scripting.FileSystemObject")
set ws = Wscript.createobject("Wscript.Shell")

'生成真正执行的Bat文件,放在TEMP目录执行
Set WshSysEnv = ws.Environment("Process")
batPath = WshSysEnv.Item("TEMP") & "\restart_dropbox.bat"
Set bat = fso.CreateTextFile(batPath, True)

'用于创建定时任务
if interval > 0 then
scriptPath = fso.GetFile(Wscript.ScriptFullName).path
'将使用schtasks命令创建定时任务
bat.WriteLine("schtasks /create /f /tn ""Dropbox定时重启"" /ru %username% /tr """ & scriptPath & """ /sc minute /mo " & interval)
end if

'用于杀死老的Dropbox
bat.WriteLine("taskkill /f /im Dropbox.exe")

'用于创建新的Dropbox
bat.WriteLine("start %appdata%\Dropbox\bin\Dropbox.exe")
bat.Close

' 执行Bat
ws.run batPath & " /start", 0

另存为 restart_dropbox.vbs 后,双击运行,注意运行后不要再移动vbs文件。

此方法的缺点是:

  1. 定时更新毕竟不是实时更新
  2. 重启可能打断正在上传的进程,影响上传效率
  3. 重启后老进程托盘图标将残留,新进程又会创建一个,时间久了图标会越来越多,鼠标移上去才会更新