windows7中的“mklink命令” 转
从 Vista 以后,微软将用户文件和用户的软件配置( AppData ) 明确划分开,并且全部存放在使用者的用户目录下。
Linux早已这样做了,并且在Linux中可将 home 挂载为独立分区,而微软显然还没学到家。用户目录依旧和系统目录一起放在同一分区。
如何将用户目录移动到非系统分区?这是本文的出发点。但本文的重心不在于此,而是 mklink ,一个命令。
一、何为 mklink
mklink 是何方神圣,值得专门作文讲述?如果用过 Linux ,那想必也看到过符号链接(这是一种特殊的文件),也用过 “ ln ” 这个链接命令,mklink 和 ln 的功能几乎一样。
mklink 便是用来创建符号链接的,这个命令并不知名,使用的人也不多。
自从 Vista 以后,微软便在 widows中 偷偷地用起了这个工具 。在用户目录下,可以看到很多很像快捷方式的文件,当然这是隐藏的,但却不能打开,其实这便是符号链接。
>dir C:\Users\wclu /a
驱动器 C 中的卷是 win7
卷的序列号是 8CD0-A743
- C:\Users\wclu 的目录
- 2009/06/11 11:42 <DIR> .
- 2009/06/11 11:42 <DIR> ..
- 2009/06/11 00:04 <DIR> AppData
- 2009/06/11 00:04 <JUNCTION> Application Data [C:\Users\wclu\AppData\Roaming]
- 2009/06/11 00:04 <DIR> Contacts
- 2009/06/11 00:04 <JUNCTION> Cookies [C:\Users\wclu\AppData\Roaming\Microsoft\Windows\Cookies]
- 2009/06/11 10:05 <DIR> Desktop
- 2009/06/11 00:04 <DIR> Documents
- 2009/06/11 02:44 <DIR> Downloads
- 2009/06/11 00:04 <DIR> Favorites
- 2009/06/11 00:04 <DIR> Links
- 2009/06/11 00:04 <JUNCTION> Local Settings [C:\Users\wclu\AppData\Local]
- 2009/06/11 00:04 <DIR> Music
- 2009/06/11 00:04 <JUNCTION> My Documents [C:\Users\wclu\Documents]
上述标红色的文件,便是符号链接了(上述文件并非C:\Users\wclu目录下全部文件) 。
Vista/Windows 7使用这些符号链接,是为了兼容XP等系统。
二、mklink 用法
mklink 只能在命令提示符 “CMD” 中使用。>mklink /?
创建符号链接。MKLINK [[/D] | [/H] | [/J]] Link Target
/D 创建目录符号链接。黙认为文件
符号链接。
/H 创建硬链接,而不是符号链接。
/J 创建目录联接。
Link 指定新的符号链接名称。
Target 指定新链接引用的路径
(相对或绝对)。注:上述的符号链接等同于Linux中的软链接。
为了试验 mklink 的功能,我在 C分区中创建目录 a ,并在目录中存放文件 1.txt。
创建文件链接
E:\>mklink c:\1 c:\a\1.txt拒绝访问。E:\>mklink c:\2.txt c:\a\1.txt
为 c:\2.txt <<===>> c:\a\1.txt 创建的符号链接可见为文件创建链接时,符号链接文件的扩展名要和原文件保持一致。
E:\>mklink c:\a\1.txt d:\3.txt
当文件已存在时,无法创建该文件。E:\>mklink d:\3.txt c:\a\1.txt
为 d:\3.txt <<===>> c:\a\1.txt 创建的符号链接可见为文件创建链接时,必须是 “mklink 符号链接文件名 原文件名”的格式。
创建目录链接
E:\>mklink /d c:\b d:\a
为 c:\b <<===>> d:\a 创建的符号链接虽然d:\a 目录不存在,但依然可以创建链接,很好很强大。但打开链接时,提示错误。
E:\>mklink /d d:\a c:\a
为 d:\a <<===>> c:\a 创建的符号链接E:\>dir d: /a
驱动器 D 中的卷是 soft
卷的序列号是 BE86-8884D:\ 的目录
- 2009/06/11 10:00 <DIR> $RECYCLE.BIN
- 2009/06/11 13:08 <SYMLINK> 3.txt [c:\a\1.txt]
- 2009/06/11 13:18 <SYMLINKD> a [c:\a]
- 2009/06/11 12:54 <DIR> Program Files
- 2009/06/11 09:58 <DIR> System Volume Information
- 1 个文件 0 字节
- 4 个目录 31,089,442,816 可用字节
当把D分区中的链接文件删除时,C分区中的文件和文件夹不受任何影响。
三、mklink /d 与 makelink /j 的异同
从 mklink 的帮助中可以看到,两者皆可以创建目录链接。细心的同学可以发现,前者是创建目录链接,而后者是创建目录联接。
一字之差,有何分别?
下面分别用这两种方式为同一目录创建链接:
E:\>mklink /j d:\a c:\a
为 d:\a <<===>> c:\a 创建的联接E:\>mklink /d d:\b c:\a
为 d:\b <<===>> c:\a 创建的符号链接下面显示D分区中的文件及目录列表:
E:\>dir d: /a
驱动器 D 中的卷是 soft
卷的序列号是 BE86-8884D:\ 的目录
- 2009/06/11 10:00 <DIR> $RECYCLE.BIN
- 2009/06/11 13:33 <SYMLINK> 1.txt [c:\a\1.txt]
- 2009/06/11 13:34 <JUNCTION> a [c:\a]
- 2009/06/11 13:35 <SYMLINKD> b [c:\a]
- 2009/06/11 12:54 <DIR> Program Files
- 2009/06/11 09:58 <DIR> System Volume Information
- 1 个文件 0 字节
- 5 个目录 31,089,442,816 可用字节
mklink 不加参数或加参数 /d 时,创建的链接文件为<SYMLINK>型(<SYMLINKD>代表链接到目录)。
当加参数 /j 时,只能为目录创建联接,并且创建的联接文件为<JUNCTION>型,两种类型的链接文件有显著区别:
从最开始的 “ >dir C:\Users\wclu /a ” 可以看出,微软自家使用的都是<JUNCTION>型,至于为何,留待考证。
四、链接文件的特性
刚刚讲述了如何用 mklink 创建链接文件,那么接下来重点讲述如何链接文件的特性,既然是特性,那就是与众不同了。符号链接文件自身不能被 “复制”(只能通过特殊方法才能复制)
当复制符号链接文件时,会将符号链接所链接的目标文件或目录进行复制,并非是复制符号链接文件本身。
如何实现符号链接文件的复制呢?
>copy /?
/L 如果源是符号链接,请将链接复制
到目标而不是源链接指向的实际文件。>xcopy /? /B 对照链接目标复制符号链接本身
/* d:\1.txt 为<SYMLINK>型符号链接 */
E:\>xcopy d:\1.txt e:\1.txt /b
目标 E:\1.txt 是文件名
还是目录名
(F = 文件,D = 目录)? F
D:\1.txt
复制了 1 个文件/* d:\a 为<JUNCTION>型符号链接 */
E:\>xcopy d:\a e:\a /B
目标 E:\a 是文件名
还是目录名
(F = 文件,D = 目录)? D
复制了 0 个文件/* d:\b 为<SYMLINKD>型符号链接 */
E:\>xcopy d:\b e:\b /B
目标 E:\b 是文件名
还是目录名
(F = 文件,D = 目录)? D
复制了 0 个文件E:\>dir e: /a
驱动器 E 中的卷是 data
卷的序列号是 FEEE-FB51E:\ 的目录
- 2009/06/11 10:00 <DIR> $RECYCLE.BIN
- 2009/06/11 13:33 <SYMLINK> 1.txt [c:\a\1.txt]
- 2009/06/11 13:34 <DIR> a
- 2009/06/11 13:35 <SYMLINKD> b [c:\a]
- 2009/06/11 09:58 <DIR> System Volume Information
- 1 个文件 0 字节
- 4 个目录 31,362,203,648 可用字节
可见采用xcopy命令并上参数 /B ,可以成功复制 <SYMLINK> 型的符号链接文件,而<JUNCTION>型链接却不能被复制。
符号链接文件的透明性
符号链接的操作是透明的:对符号链接文件进行读写的程序会表现得直接对目标文件进行操作。
普通的文件操作命令(如cp、rm等)都能直接作用于符号链接。用于读写文件内容的命令将会直接访问目标文件。
windows7中的“mklink命令” 转的更多相关文章
- windows7中的“mklink命令”
从 Vista 以后,微软将用户文件和用户的软件配置( AppData ) 明确划分开,并且全部存放在使用者的用户目录下. Linux早已这样做了,并且在Linux中可将 home 挂载为独立分区,而 ...
- Windows7 中常用的一些DOS命令总结
Windows7 中常用的一些DOS命令总结... ----------------------- -------------------------------------------- dos,是 ...
- mklink命令转移win7系统盘文件夹users和programdata(附xp的方法)
mklink命令转移win7系统盘文件夹users和programdata(附xp的方法) 使用mklink命令转移文件夹清理臃肿的c盘 (一) 我的 ...
- windows7 中开启无线热点
我用的是移动的 CMCC-EDU 上网,但是这个只能在一个设备上登陆,那么问题就来了,当我电脑需要用网,手机也想要用网(不用 2/3/4G)该怎么办? 电脑操作系统:windows7 接下来是开启 w ...
- Windows 7 mklink命令详解
mklink是Windows 7下的一个类似于linux下In的命令,其作用是在NTFS文件系统中创建文件或目录的链接(类似于桌面快捷方式).如果加以利用其发挥的作用是非常的大的,不仅可以帮助我们节省 ...
- [转载]windows7中没用boot.ini文件而是改用BCDEDIT来配置了
原文地址:windows7中没用boot.ini文件而是改用BCDEDIT来配置了作者:开心骝哥 本人安装的Win7,因为机上有两个系统,一个dos系统,一个win7系统,开机时总是会在系统选择的界面 ...
- 批量删除Windows7中隧道适配器的方法
批量删除Windows7中隧道适配器的方法 1.在网卡属性的"网络"中,将"Internet协议版本(TCP/IPv6)"前面的勾去掉. 2.在CMD下分别执行 ...
- win10下使用mklink命令给C盘软件搬家
在windows下,大多数软件会默认安装在C盘,即使小心翼翼地点开“自定义”->“安装路径”,然后把软件安装到其他盘,还是会有很多软件用到的数据文件被塞到C盘,虽然可以到注册表修改软件默认安装路 ...
- linux shell 中的sleep命令
开始还以为是这样的语法: sleep(1), 后面发现是: linux shell 中的sleep命令 分类: LINUX 在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小 ...
随机推荐
- 把安卓源代码中的system app独立出来,像开发普通app那样开发
个人建议首先依照android源码的ide/eclipse中的格式化xml和import导入到你编译的eclipse中,假设你编译的android源码是2.3以上的版本号的,建议用JDK6 ...
- 搜搜(www.soso.com),I 老虎油!
搜搜(www.soso.com),I 老虎油! 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用 ...
- Android 跨应用调用Activity及Service
如何调用另外一个app应用的activity或者service,本文提供一个验证可行的方法. 调用方法: Intent intent=new Intent("youActionName&qu ...
- 开发环境下jboss 7.1.1 Final 的jsp热部署解决方案--转
公司的网站系统使用的中间是jboss7.1.1 Final,由于有些数据和服务测试环境不具备,免不了要在测试环境调试些jsp页面,发现从jboss社区里下载的jboss应用有个问题,新增jsp页面会实 ...
- [转] 使用CodeViz生成C/C++函数调用关系图
运行环境:虚拟机下的Ubuntu 11.04 结合Graphviz工具,使用CodeViz可以生成直观和漂亮的C/C++程序函数之间的调用关系图. 1.安装graphviz 在安装CodeViz之前, ...
- [转] 深度解剖DIV+CSS工作原理
本文和大家重点讨论一下DIV+CSS工作原理,在一般情况的DIV+CSS开发静态html网页时,我们把html和CSS是分开的,形成html页面和CSS文件. DIV+CSS原理解剖 在一般情况的DI ...
- MVC模式实现登录以及增删改查之登录(一)
我在这里用的不是maven项目,用的一般的web项目,所以需要用到的架包需要自己去下载添加,在项目中,一定注意环境的配置,我用的是jre1.7 1 新建项目 2 建立好MVC的管理包,导入对应的架 ...
- Java EE的十三种核心技术
1. JDBC: Java Database Connectivity 2. JNDI: Java Name and Directory Interface 3. EJB: Enterprise Ja ...
- android中的文件操作详解以及内部存储和外部存储(转载)
原文链接:http://m.blog.csdn.net/article/details?id=17725989 摘要 其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安 ...
- RxJava 教程-1 简介 原理 线程控制 变换
简介 RxJava 是什么? RxJava 在 GitHub 主页上的自我介绍是 RxJava is a Java VM implementation of ReactiveX: a library ...