---
title: 让 OneDrive 也具有同步特性
tags:
  - 使用体验
  - OneDrive
categories:
  - OneDrive
titlename: eb5a6499
date: 2018-11-23 18:11:06
updated: 2019-07-21 09:59:10
keywords: [OneDrive, 同步盘, 使用体验]
---
### 动机

11 月份刚刚经历过期中考试，期间看了看存放在本地的课程资料，已经存了有不下 1 个 G，而我在 OneDrive 上也存放了大量的课程资料，其中很大一部分是为了能够在其它设备上也能查阅。这就提出了一个“同步”的需求。然而微软的操作至今让不少人为之费解：**OneDrive 被微软定义为“同步盘”，却不具备同步盘应该有的一个重要特性，那就是文件自动实时同步**。到目前为止，**如果你想让你的本地文件能够在 OneDrive 上自动同步，那么唯一的方法就是将这个文件放入 OneDrive 在此电脑的本地文件夹位置，然后 OneDrive 才能够识别此文件并开始上传和同步**。这样的操作麻烦不说（每次都要手动移动文件），还有可能因为一时疏忽忘记掉。  <!--more-->  

![7cd83d85fdaa0e9d404abf390711b8bc.jpg](https://i.loli.net/2018/11/23/5bf7fa80b765e.jpg)

期间也尝试了不少同步盘软件，国内坚果云做的非常不错，不仅具有同步盘的特性，由于其服务器在国内，速度自然没得说，缺点就是空间和每月同步流量较少，但如果你只是需要同步一些普通的文档等，这些流量和空间已经足够了；而国外 DropBox 不失为一个好的选择，然而它的缺点也跟坚果云一样，除此之外由于众所周知的原因，DropBox 服务在国内必须要科学上网才能正常访问，如果你不是 24 小时全天挂梯子，那体验定会大打折扣，况且作为将 OneDrive 引荐奖励全部刷满的我来说，还舍不得那 25 个 G 的免费空间（15G+10G），既能存储一些个人文件，又能当同步盘用，可谓一举两得。  

**在继续之前，还有两点要提：**  

>1. OneDrive 的客户端可以正常访问，但是在国内无法访问 OneDrive 的网页端（解决方法：挂梯子、改 hosts 或 DNS 均可）  
>2. OneDrive 的上传速度跟你所在的当地运营商有关，如果访问速度过慢，你可能就要怀疑一下了（我这里，包括在学校还好）  

接下来，就是这一操作的主角：`mklink` 

### 链接目录 - mklink  

粗略来说，**mklink 在两个文件（夹）之间创建一种“链接”的关系**，我们可以用这样的方式来达到让 OneDrive 自动实时同步的目的。  

**关于 mklink 命令的介绍：（图片来源：微软 IT 支持中心）**  

![2018-11-23_183408.png](https://i.loli.net/2018/11/23/5bf7d81e5f2a0.png)

跟其它大多数命令一样，**mklink 也有自己的功能参数，例如`mklink /d`,`mklink /j`等**，用一张表格来说明这些命令参数的意义：  

|    命令参数    |                        参数意义                        |
| :------------: | :----------------------------------------------------: |
|       /d       | 创建一个符号链接，在缺省情况下，默认会创建文件“软”链接 |
|       /h       |                 在硬盘上建立一个硬链接                 |
|       /j       |                    创建一个目录链接                    |
|  &lt;link&gt;  |                指定要创建的符号链接名称                |
| &lt;target&gt; |   指定新符号链接的参考位置（绝对位置或相对位置均可）   |
|       /?       |                      显示命令帮助                      |

举例来说，如果要将 D 盘下的 MyDocs 文件夹和位于根目录的 Documents 文件夹建立链接，应该这样键入（参考）  

```
mklink /d \MyDocs \Users\User1\Documents
```

这样做，就建立了一个符号链接，`D:\MyDocs`下的文件实际位于根目录的`\User\User1\Documents`中，但在`D:\MyDocs`中仍然可以查看并进行正常的文件操作，**如果你在其中一个文件夹中进行了更改，那么另一个文件夹也会进行相同的更改**。   

### 跟 OneDrive 链接起来

在上文中已经基本解释了 mklink 的命令作用和格式，以及操作示例。而 OneDrive 的操作则跟上文大同小异，命令格式为：    

```
mklink /d <要同步的本地文件夹> <待同步文件夹在OneDrive上的位置>
```

{% note danger %}

**注意：<font style="color:red">在创建链接之前，`<要同步的本地文件夹>`不能事先存在</font>**

{% endnote %}   

**例如，如果要将 G:\SyncDir 与 OneDrive 中的 SyncDir 文件夹之间创建链接，命令如下：**  

```
mklink /d "G:\SyncDir" "C:\Users\<你的用户名>\OneDrive\SyncDir"
```

命令输入完成后按下回车键 <kbd>Enter</kbd>  

如果出现如下图示，就表明创建链接成功：  

![2018-11-23_201609.png](https://i.loli.net/2018/11/23/5bf7efa2c3e9a.png)

进入 G:\ 和 OneDrive 来看一下：  

![2018-11-23_202234.png](https://i.loli.net/2018/11/23/5bf7f190936dd.png)

在创建完成后，**这两个文件夹相互之间建立了链接关系，在本地文件夹中创建文件或进行其它更改，对应的 OneDrive 位置也会进行自动同步**。  

**示意动图：**  

![onedrivesync.gif](https://i.loli.net/2018/11/23/5bf7f3a889201.gif)

顺带提一下，我还看了看其它网站上对 mklink 和 OneDrive 同步的文章，这些文章的命令都写成`mklink /d <待同步文件夹在OneDrive上的位置> <要同步的本地文件夹>`，然而经过我亲自测试，这样做无法将本地文件夹自动上传到 OneDrive 上，除非你手动重启 OneDrive 客户端，然而这已经偏离了“要 OneDrive 自动实时同步”的初衷，不知道是我系统的问题还是他们一水儿相互照抄的问题了...   

{% note warning %}  

**注意：**如果希望**从其它设备上传的文件能够立刻自动下载到本地而非按需下载**，需要勾选上“**始终在此设备上可用**”一项。<span style="background: #222; color: white">**方法为：**</span>进入 本地设备上的OneDrive文件夹，选中要更改属性的文件夹，在其上面**右键，弹出的菜单中单击“始终在此设备上可用”**即可。  

{% endnote %}

### 其它的注意事项

**这个方法目前来说还存在一些问题，例如**

>1. 部分时候 OneDrive 可能不能正常显示文件夹的同步状态图标。  
>2. 对于一些设备，如果不能对符号链接很好支持，某些情况可能会出现同步不及时的问题，如果出现此情况，请手动刷新即可。  
>3. 目前 OneDrive 还不能支持增量同步这一特性，也就是说如果你修改了一个文件的内容，OneDrive 就会把整个文件完全重新同步一遍。

但如果你对同步的要求不高，且需要较高容量的在线存储空间，又不想付费的话，可以尝试一下这样的“另类”同步方法。  
