当前位置: 首页 > news >正文

解决 mklink 使用中的各种坑(硬链接,软链接/符号链接,目录链接)

通过 mklink 命令可以创建文件或文件夹的链接,而这种链接跟快捷方式是不一样的。然而我们还可能会遇到其使用过程中的一些坑,本文将整理这些坑并提供解决方法。


mklink 可以像创建快捷方式一样建立文件或文件夹的链接,但不同于快捷方式的是,mklink 创建的链接绝大多数程序都不会认为那是一个链接,而是一个实实在在的文件或文件夹。

例如,为 D:\OneDrive\Foo 文件夹创建链接到 D:\Foo,那么 D:\OneDrive\Foo 中有一个 .git 文件时,绝大多数程序都会以为 D:\Foo 中也存在 .git 文件,而且文件内容一模一样。

mklink 可以创建符号链接、硬链接和目录链接。在 cmd 中输入 mklink 即可看到以下这样的帮助信息。

C:\Users\lvyi>mklink
创建符号链接。

MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      创建目录符号链接。默认为文件
                符号链接。
        /H      创建硬链接而非符号链接。
        /J      创建目录联接。
        Link    指定新的符号链接名称。
        Target  指定新链接引用的路径
                (相对或绝对)。

具体的使用不是本文的重点,可以阅读本文末尾的参考资料了解,这里只给出他们之间的大体区别。

使用方式适用于快捷方式小箭头
不带参数文件
/D文件夹
/J文件夹
/H文件

上面的表格顺序,从上到下的行为从越来越像快捷方式到越来越像两个独立的文件夹。

是的,PowerShell 中就是中没有 mklink 命令。如果要在 powershell 中使用 mklink,那么得先敲 cmd 进入 cmd 之后再使用 mklink 命令。

如果你是一个重度强迫症患者,那么可以编写一个 powershell 的扩展函数来实现:Creating a Symbolic Link using PowerShell - Learn Powershell - Achieve More。

0x02 坑:权限

默认我们的用户账户是 Administrators 组的,会继承它的权限设定。正常情况下,我们使用 mklink 是可以成功执行的。但如果文件系统的设置比较奇怪或者重装过系统,那么可能出现没有权限的错误。

C:\Users\lvyi>mklink /D D:\Foo D:\OneDrive\Foo
你没有足够的权限执行此操作。

这时,使用管理员权限启动 cmd 是最简单的做法。不过也可以考虑在 本地安全策略(secpol.msc)\本地策略\用户权利分配 中添加当前用户。


参考链接

  • 活用 MKLINK 命令保护、节省你的硬盘 - SinoSky
  • 关于mklink的/D /J 区别 - CSDN博客
  • Creating a Symbolic Link using PowerShell - Learn Powershell - Achieve More
  • win10 无法运行mklink命令同步onedrive和电脑数据 - Microsoft Community
  • Win10下执行mklink提示你没有足够权限执行此操作 - CSDN博客

相关文章:

  • Roslyn 的确定性构建
  • 使用 MSBuild 响应文件 (rsp) 来指定 dotnet build 命令行编译时的大量参数
  • VS 编译太慢了吗?新建解决方案配置关闭一部分项目的编译
  • 流畅设计 Fluent Design System 中的光照效果 RevealBrush,WPF 也能模拟实现啦!
  • 语义版本号(Semantic Versioning)
  • 使用 GitVersion 在编译或持续构建时自动使用语义版本号(Semantic Versioning)
  • UWP 流畅设计中的光照效果(容易的 RevealBorderBrush 和不那么容易的 RevealBackgroundBrush)
  • 使用 Emit 生成 IL 代码
  • 如何快速编写和调试 Emit 生成 IL 的代码
  • 自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference
  • 冷算法:自动生成代码标识符(类名、方法名、变量名)
  • WPF/UWP 的 Grid 布局竟然有 Bug,还不止一个!了解 Grid 中那些未定义的布局规则
  • Git 更安全的强制推送,--force-with-lease
  • 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦)
  • 理解 C# 项目 csproj 文件格式的本质和编译流程
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 345-反转字符串中的元音字母
  • Android框架之Volley
  • ECMAScript入门(七)--Module语法
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JAVA多线程机制解析-volatilesynchronized
  • Laravel 实践之路: 数据库迁移与数据填充
  • nodejs实现webservice问题总结
  • NSTimer学习笔记
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 从零搭建Koa2 Server
  • 对JS继承的一点思考
  • 回顾2016
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 批量截取pdf文件
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • ​ubuntu下安装kvm虚拟机
  • #Spring-boot高级
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (13):Silverlight 2 数据与通信之WebRequest
  • (C++17) optional的使用
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (算法)Travel Information Center
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)http-server应用
  • .Net(C#)自定义WinForm控件之小结篇
  • .Net8 Blazor 尝鲜
  • .Net中的集合
  • .NET中使用Protobuffer 实现序列化和反序列化
  • .Net组件程序设计之线程、并发管理(一)
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @vue/cli 3.x+引入jQuery
  • [20170728]oracle保留字.txt