Press "Enter" to skip to content

在Windows用Rclone挂载网络硬盘

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之后,注册表开机启动程序之前(即任务管理器“启动”页面中的程序之前)。


    发表回复

    您的电子邮箱地址不会被公开。 必填项已用 * 标注