Last updated on 2023/11/4
Rclone Windows版挂载
具体的步骤我就不赘述了,网上有很多,而且很详细很全面,下面是一篇我认为比较好的,大家可以参考下:
Windows平台下使用 Rclone 挂载 OneDrive 为本地硬盘 – 热夏 – 博客园 (cnblogs.com)
这种方式挂载是使用了API的方式,不会受到Cookie过期的影响,即一次配置即可一直使用。
我主要要介绍的是Rclone挂载以后的后台运行以及开机启动配置。
后台运行
原文中说到:
此时请使用
git bash
的终端执行以下命令,因为我使用cmd
和powershell
都出现关闭终端后挂载程序退出、本地挂载的OneDrive退出的现象。 如果你的windows没有安装git , 请自行安装。若你使用cmd
的话 ,cmd
是不能退出的,要保持cmd
不退出本地硬盘才一直挂载着。
作者说的没有错,确实是这样,但是我要讲的是另一种方法可以真正实现后台运行,而且没有其它附加成本,不需要借助其他软件,就是VBS脚本。不多说,我直接贴出我自用的代码:
Dim found, cacheDir, commonParameter, remoteName, remoteFolder, mountPoint, mountParameter
cacheDir = "D:\ProgramData\Network Drive Cache"
commonParameter = " --cache-dir " & Chr(34) & cacheDir & Chr(34) & " --vfs-cache-mode full --vfs-cache-max-age 12h --vfs-cache-max-size 1G --vfs-read-chunk-size 36M --buffer-size 12M -o FileSecurity=" & Chr(34) & "D:P(A;;FA;;;OW)(A;OICIIO;GA;;;OW)(A;;0x1301bf;;;WD)(A;OICIIO;SDGXGWGR;;;WD)" & Chr(34) & ""
Set Ws = CreateObject("WScript.Shell")
Set Fso = CreateObject("Scripting.FileSystemObject")
' Mount OneDrive
remoteName = "OneDrive"
remoteFolder = "\Storage"
mountPoint = "A:"
mountParameter = remoteName & ":" & remoteFolder & " " & Chr(34) & mountPoint & Chr(34) & " --volname \\local\" & remoteName & commonParameter
If Not IsRcloneRunning(remoteName) Then
If Fso.FolderExists(mountPoint) Then
Fso.DeleteFolder(mountPoint)
End If
Ws.Run "rclone mount " & mountParameter, 0, False
End If
' Mount JianGuoYun
remoteName = "JianGuoYun"
remoteFolder = "\Storage"
mountPoint = "D:\Storage"
mountParameter = remoteName & ":" & remoteFolder & " " & Chr(34) & mountPoint & Chr(34) & commonParameter
If Not IsRcloneRunning(remoteName) Then
If Fso.FolderExists(mountPoint) Then
Fso.DeleteFolder(mountPoint)
End If
Ws.Run "rclone mount " & mountParameter, 0, False
End If
Set Fso = Nothing
Set Ws = Nothing
Function IsRcloneRunning(remoteName)
Dim colProcesses, objProcess
Set colProcesses = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'rclone.exe'", , 48)
For Each objProcess In colProcesses
If InStr(objProcess.CommandLine, remoteName) Then
IsRcloneRunning = True
Exit Function
End If
Next
IsRcloneRunning = False
End Function
将这些代码保存为.vbs
文件,按照你自己的情况进行修改,以管理员身份执行后即可实现后台运行(注意,直接以管理身份运行会有些问题,后面会讲到)。我这里只简单讲一下我用的代码中各部分的意思,方便修改,更高级的用法请参考其他人的文章或者直接移步官网:Documentation (rclone.org)。
代码开始的Dim
为定义变量,不用理会,commonParameter
是对于有多个挂载配置时,不同挂载配置中相同的部分,cacheDir
是缓存目录,可以自己设置,IsRcloneRunning
方法就是检测要启动挂载的这个配置是否已经在运行中了,避免重复启动。此外,代码中检测mountPoint
如果存在就删除是因为如果作为一个文件夹挂载,有时候重启电脑后mountPoint
并没有被正常清除,会导致挂载失败(如果是以一个物理或网络硬盘挂载则不存在这个问题)。另外一点是"--volname \\local\" & remoteName
这一部分,这是将要挂载的网盘看作位于\\local\Onedrive
的网络驱动器,不加这一部分的话网盘会被当做本地磁盘挂载,看你自己的需求,但是我的建议是保留这部分,因为Windows对网络驱动器会有适应性的调整。至于把双引号写作Chr(34)
是因为这里涉及到双引号嵌套,写作引号会导致代码很乱,就不细讲了。
开机启动
原文中说:
创建一个名称为
startup_rclone.bat
的文件,里面填写上面的挂载命令:rclone mount OneDrive_local:/ Q: --cache-dir E:\OneDrive --vfs-cache-mode writes &
将这个文件放在
C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
中
当然,咱们使用VBS脚本就不用这个.bat
文件了,不过我没有尝试把VBS脚本文件放到上面的目录中,所以不知道这个方案对VBS脚本会不会生效,但是我要讲的是另一种不太常见的开机自启方案——计划任务,使用的Windows组件叫做“任务计划程序”,位于“开始菜单”→“Windows 管理程序”(或者“Win + X菜单”→“计算机管理”)。趁着这篇教程我就简单讲一下这个程序的基本用法,更高阶的建议查看其它文章或者直接参考微软官方文档。
打开这个程序,长这样:
点击右上角创建任务(基本任务也可以,但是选项比较少,创建完还得修改,不如直接一步到位),打开是这样的:
图中被挡住的部分是“计算机名\用户名”,在本例中,VBS脚本至少需要管理员权限运行,但是对于挂载这种情况来说,使用管理员账户会有问题,即虽然启动成功了,但是你无法在文件资源管理器中看到挂载点,所以需要以SYSTEM
用户执行脚本,但是即使这样你也无法看到挂载点,还需要一项设置,最后会讲到。
此外使用SYSTEM
用户执行脚本时需要将你的配置文件(即%AppData%\Rclone\rclone.conf
)复制到%windir%\System32\config\systemprofile\AppData\Roaming\Rclone
文件夹下。
下面是我的配置,仅供参考,根据自己的情况修改(注意用户账户使用SYSTEM
用户,下图Users
是之前的旧脚本使用的):
在这里填入你的VBS脚本的位置:
最后保存以后就可以成功配置Rclone开机后台启动了,不会出现任何窗口。
上面说了,最后还有一项设置才算彻底结束,参考微软官方文档:映射驱动器不可用 – Windows Client | Microsoft Learn,修改后重启电脑,正好也可测试一下你有没有设置成功。
到这里Rclone使用任务计划程序进行开机后台启动的介绍就全部结束了。
任务计划程序其实功能很强大,类似于Linux上的Systemd Timer,这里设置开机启动只能算是很低级的一个功能,但是鉴于这个方法很小众,所以在这里介绍一下。通过以上步骤可以配置任何程序的开机启动,而且优先级较高,实测优先级在explorer之后,注册表开机启动程序之前(即任务管理器“启动”页面中的程序之前)。