在Windows 10中进行符号链接的正确方法是什么?
#1 楼
Windows 10中似乎已不再使用结点命令。您可以从Windows SysInternals(它是Microsoft的一部分)下载结点:
结点不仅允许您创建NTFS结点,它使您可以查看文件或目录是否实际上是重新解析点。重新解析点是NTFS联结所基于的机制,Windows的远程存储服务(RSS)以及卷安装点都使用它们。
请阅读此Microsoft KB文章,以获取有关使用联结的提示。 br />请注意,Windows不支持与远程共享上目录的联结。
那么如何在Windows 10中创建联结或目录符号链接?
按照说明下载
junction
现在可以使用以下命令。
创建结点:
junction "C:\Documents and Settings\UserName\My Documents\My Dropbox\My Games" "C:\Documents and Settings\UserName\My Documents\My Games"
创建目录符号链接:
mklink /D "C:\Documents and Settings\UserName\My Documents\My Dropbox\My Games" "C:\Documents and Settings\UserName\My Documents\My Games"
您可以使用在Windows 10中使用
mklink /j
或junction
创建连接。您可以在Windows 10中使用
mklink /d
创建目录符号链接。注意:
junction
也可以列出连接并确定文件是否是与mklink
不同的结点。mklink
是仅在cmd
shell中可用的内部命令。通过defa创建符号链接需要具有管理员权限。
还可以将其授予其他用户。可以在以下位置授予安全设置“创建符号链接”:
Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment\
示例
使用mklink创建目录符号链接:
F:\test>mklink /d test-dir-sym-link test
symbolic link created for test-dir-sym-link <<===>> test
使用mklink创建结点:
F:\test>mklink /j test-junction test
Junction created for test-junction <<===>> test
使用结点创建结点:
F:\test>C:\apps\NirSoft\SysinternalsSuite\junction.exe test-junction test
Junction v1.06 - Windows junction creator and reparse point viewer
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com
Created: F:\test\test-junction
Targetted at: F:\test\test
进一步阅读
Windows CMD命令行的AZ索引-与Windows cmd线相关的所有事物的极佳参考。
mklink-创建指向目录或文件的符号链接,或者创建硬文件链接或目录连接。
评论
这与mklink / j不同吗?
–尊诺
16年1月2日在15:51
据我所知,@Jonno创建联结时是相同的。联结还将列出与mklink不同的联结
–DavidPostill♦
16年1月4日在9:31
据我所知,您不能在PowerShell中使用mklink,因此必须使用cmd.exe。另外,您必须以管理员身份运行它。但是不要相信我。我仅使用Windows计算机约40个小时。
–布鲁诺·布鲁诺斯基(Bruno Bronosky)
16年1月5日,18:52
@BrunoBronosky正确。这是因为mklink是仅在cmd shell中可用的内部命令。请注意,某些cmd内部命令已在PowerShell中实现,例如dir。
–DavidPostill♦
16年5月5日在19:12
@DavidPostill进行了改进,但仍然将重点放在接合点上,需要单独下载。 mklink似乎可以更好地作为主要焦点,最后将联结点作为退休的额外选择。
– WBT
18/12/26在15:01
#2 楼
以提升的管理员身份打开PowerShell会话,然后键入:New-Item -ItemType SymbolicLink -Path E:\Data\MyGames -Target "C:\users\UserName\MyGames"
,或使用不太冗长的语法:
ni E:\Data\MyGames -i SymbolicLink -ta "C:\users\UserName\MyGames"
当然,在2016年和Windows 10中,您不想摆弄cmd命令或外部下载。
Windows 10附带了PowerShell 5,它内置了对创建符号链接的支持。
评论
当然,在2016年,我不必非要创建符号链接! Windows最大的失败之一。
– David Arno
16 Dec 2'在20:30
你在开玩笑吧?我宁愿做“ mklink / d test-dir-sym-link test”,也不愿做“ New-Item -ItemType SymbolicLink -Path E:\ Data \ MyGames -Target“ C:\ users \ UserName \ MyGames”。 -verbose PowerShell语法并不是我真正喜欢的...
–Jaime de los Hoyos M.
16年12月13日在12:00
@JaimedelosHoyosM-使用较短的PowerShell语法,可以使用ni test-dir-sym-link -i SymbolicLink -ta test
– Peter Hahndorf
17年5月6日在10:29
有没有办法在没有管理员权限的情况下从PowerShell创建SymbolicLink?
– cjsimon
18年6月12日在23:38
@scape-您可以使用参数名称的前几个字母来唯一标识参数,例如-i对于-ItemType就足够了,但-t还不够,因为有多个以t开头的参数,所以我们需要使用-ta
– Peter Hahndorf
19年1月24日在16:46
#3 楼
如果您想使用GUI工具进行符号链接的制作/编辑,请使用http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html
链接外壳扩展程序(LSE)为创建Hardlinks,Junctions,Volume Mountpoints和Windows7 / 8的Symbolic Links(以下统称为Links)的文件夹克隆过程利用Hardlinks或Symbolic Links进行复制,并执行复制过程来处理Junctions,Symbolic Links和Hardlinks。顾名思义,LSE被实现为Shell扩展,可以从Windows资源管理器或类似的文件/文件夹管理器进行访问。该扩展名允许用户选择一个或多个文件或文件夹,然后使用鼠标来完成所需链接的创建-硬链接,连接或符号链接,或者在文件夹的情况下,创建由硬链接或符号链接组成的克隆。所有支持NTFS 5.0或更高版本的Windows版本(包括Windows XP64和Windows7 / 8/10)都支持LSE。 FAT文件系统不支持硬链接,连接点和符号链接,FAT文件系统也不支持克隆和智能复制过程。
评论
请阅读“我如何推荐软件”以获取有关如何推荐软件的一些提示。您应该至少提供一个链接,有关该软件本身的一些其他信息,以及如何使用它来解决问题。
–DavidPostill♦
16-10-24在15:59
这是一个很好的工具,但是答案中的一些更多信息将是很好的。
–DavidPostill♦
16-10-24在16:00
#4 楼
如果您具有Windows 10 build 14972(2016年12月)或更高版本:https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10
您可以启用开发人员模式:
https://howtogeek.com/292914/what-is-developer-mode-in-windows-10
,然后在没有管理员的情况下使用
mklink
。或者,PowerShell 6.2.0(2019年3月)或更高版本允许在没有管理员的情况下使用Symlink:New-Item -ItemType SymbolicLink -Path new.txt -Target old.txt
#5 楼
没有任何安装!
有一个简单的开源
symlink_creator.bat
文件。将所需的文件/文件夹拖放到该文件上。 />
它是开源的(请参阅说明),因此,只需右键单击>在文件上编辑即可自己查看其内容(仅几行)。无需安装其他
.exe
或.dll
文件。:: ================================================================== ::
:: ======================== Puvox.Software ======================== ::
:: ================================================================== ::
:: ============== Symlink Creator with Drag&Drop v1.3 =============== ::
:: This script makes a symlink of any files/folders ( )
:: ================================================================== ::
:: ================================================================== ::
@echo off
setlocal enableextensions enabledelayedexpansion
if "%~1"=="" ( mshta "javascript:alert('You should drag desired files onto this');close();" && exit )
set /P inputed_target_dir= Path to folder, wherein the symlink will be created:
set inputed_target_dir=%inputed_target_dir%\
set type=0
for %%a in (%*) do (
rem in PARENTHESIS we use ! instead % for set-ed variables (read more: https://superuser.com/a/78509/249349 )
set original_path=%%a
set original_path_quoted=!original_path!
rem Make it quoted (if it's not already quoted)
set original_path_quoted|find """" >nul || set original_path_quoted="!original_path!"
set isDirectory=no
:: if directory
FOR %%i IN (!original_path_quoted!) DO IF EXIST %%~si\NUL (
set isDirectory=yes
for /D %%i in (!original_path_quoted!) do SET original_drive=%%~di
for /D %%i in (!original_path_quoted!) do SET original_dir=!original_drive!%%~pi
for /f "delims=" %%i in (!original_path_quoted!) do SET original_basename=%%~ni
)
:: if file
FOR %%i IN (!original_path_quoted!) DO IF NOT EXIST %%~si\NUL (
set isDirectory=no
for /f "delims=" %%i in (!original_path_quoted!) do SET original_drive=%%~di
for /f "delims=" %%i in (!original_path_quoted!) do SET original_dir=!original_drive!%%~pi
for /f "delims=" %%i in (!original_path_quoted!) do SET original_basenameWithExt=%%~nxi
)
for /D %%i in ("%inputed_target_dir%") do SET target_drive=%%~di
for /D %%i in ("%inputed_target_dir%") do SET target_dir=!target_drive!%%~pi
set isSameDrive=1
IF /I "!original_drive!"=="!target_drive!" ( set isSameDrive=2 )
:: if same ditectories, then use prefix name
set prefix=
IF /I "!original_dir!"=="!target_dir!" ( set prefix=_symlinked_ )
if !type! LSS 1 (
rem :: If same drives, then allow user to choose HARD method. Otherwise, only SOFT can be used
set type=2
rem :: DONT USE "!isSameDrive!"=="yes" comaprison, as it has issue
if /i !isSameDrive! GTR 2 ( set /P type= Seems source and Destinaton drives are same, so you have an opportunity to create HARD-SYMLINK [press 1], otherwise press ENTER and the default SOFT-SYMLINK will be created : )
)
:: if directory
if !isDirectory!==yes (
FOR %%i IN (!original_path_quoted!) DO IF EXIST %%~si\NUL (
IF "!type!"=="1" (
mklink /J "!target_dir!\!prefix!!original_basename!" !original_path_quoted!
) ELSE (
mklink /D "!target_dir!\!prefix!!original_basename!" !original_path_quoted!
)
)
)
:: if file
if !isDirectory!==no (
FOR %%i IN (!original_path_quoted!) DO IF NOT EXIST %%~si\NUL (
IF "!type!"=="1" (
mklink /H "!target_dir!\!prefix!!original_basenameWithExt!" !original_path_quoted!
) ELSE (
mklink "!target_dir!\!prefix!!original_basenameWithExt!" !original_path_quoted!
)
)
)
)
:: FOR loop
:: mshta "javascript:alert('error: creating Hard-Symlink for different drives has failed');close();"
mshta "javascript:alert('Finished');close();"
endlocal
评论
您应该在答案中添加此批处理文件的工作原理以及与之的关联。批处理文件可能具有很大的破坏性,并且从互联网上随机运行批处理文件违反了常识。
–凯尔·阿普林(Kyle Applin)
18 Mar 19 '18 at 13:45
上面的答案已经有一个主持人对此发表评论。我主要关注您的答案,因为您链接的网站看起来有些粗略,并且您的答案的格式为我触发了一些危险信号。我真的只是偏执。
–凯尔·阿普林(Kyle Applin)
18 Mar 19 '18 at 14:58
不幸的是,它以错误“语法不正确”结束
–tutejszy
19/09/17在11:25
@ T.Todua ....我也进行了编辑,以添加批处理文件的实际内容,以防万一链接再次中断,逻辑本身可用。
–喝一些皮条客果汁IT
20 Mar 3 '20 at 12:04
您可以直接从CMD运行Javascript,而无需使用电子,Node或对Native好奇吗?
–瑞安·斯通(Ryan Stone)
20-10-13在7:15
评论
mklink怎么了?任何人都了解(公司)漫游配置文件中的结点的好坏信息? (即)潜伏...
链接已断开(有效):“非官方Dropbox Wiki不再可用。”