205

I was reading http://web.archive.org/web/20160820000804/https://www.dropboxwiki.com/tips-and-tricks/sync-game-saves-across-multiple-computers, and I know junction/mklink worked in Windows 7 as well, but it seems like the junction command has been retired in Windows 10.

What's the correct way to make symbolic links in Windows 10?

4wk_
  • 205
red
  • 2,348

6 Answers6

197

It seems like the junction command has been retired in Windows 10.

You can download junction from Windows SysInternals (which is part of Microsoft):

Junction not only allows you to create NTFS junctions, it allows you to see if files or directories are actually reparse points. Reparse points are the mechanism on which NTFS junctions are based, and they are used by Windows' Remote Storage Service (RSS), as well as volume mount points.

Please read this Microsoft KB article for tips on using junctions.

Note that Windows does not support junctions to directories on remote shares.


So how do I create junctions or directory symbolic links in Windows 10?

Download junction as instructed above.

Now you can use the following commands.

Create a junction:

junction "C:\Documents and Settings\UserName\My Documents\My Dropbox\My Games" "C:\Documents and Settings\UserName\My Documents\My Games"

Create a directory symbolic link:

mklink /D "C:\Documents and Settings\UserName\My Documents\My Dropbox\My Games" "C:\Documents and Settings\UserName\My Documents\My Games"

You can use either mklink /j or junction in Windows 10 and upwards to create junctions.

You can use mklink /d in Windows 10 and upwards to create directory symbolic links.

Notes:

  • junction can also list junctions and determine if a file is a junction unlike mklink.

  • mklink is an internal command only available within a cmd shell.

  • By default Administrator privileges are required to create symbolic links.

    It can also be granted to other users. The security setting "Create symbolic links" can be granted at:

      Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment\
    

Examples

Using mklink to create a directory symbolic link:

F:\test>mklink /d test-dir-sym-link test
symbolic link created for test-dir-sym-link <<===>> test

Using mklink to create a junction:

F:\test>mklink /j test-junction test
Junction created for test-junction <<===>> test

Using junction to create a junction:

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


Further Reading

DavidPostill
  • 162,382
100

Open a PowerShell session as elevated administrator and type:

New-Item -ItemType SymbolicLink -Path E:\Data\MyGames -Target "C:\users\UserName\MyGames"

or using less verbose syntax:

ni E:\Data\MyGames -i SymbolicLink -ta "C:\users\UserName\MyGames" 

Surely in 2016 and with Windows 10 you don't want to fiddle around with cmd commands or external downloads.

Windows 10 comes with PowerShell 5 which has builtin support for creating symbolic links.

30

If you want a GUI Tool for making/editing that symlinks use http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html

Link Shell Extension (LSE) provides for the creation of Hardlinks , Junctions , Volume Mountpoints , and Windows7/8's Symbolic Links, (herein referred to collectively as Links) a folder cloning process that utilises Hardlinks or Symbolic Links and a copy process taking care of Junctions, Symbolic Links, and Hardlinks. LSE, as its name implies is implemented as a Shell extension and is accessed from Windows Explorer, or similar file/folder managers. The extension allows the user to select one or many files or folders, then using the mouse, complete the creation of the required Links - Hardlinks, Junctions or Symbolic Links or in the case of folders to create Clones consisting of Hard or Symbolic Links. LSE is supported on all Windows versions that support NTFS version 5.0 or later, including Windows XP64 and Windows7/8/10. Hardlinks, Junctions and Symbolic Links are NOT supported on FAT file systems, and nor is the Cloning and Smart Copy process supported on FAT file systems.

enter image description here

odvpbre
  • 409
8

If you have Windows 10 build 14972 (December 2016) or higher:

https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10

you can enable developer mode:

https://howtogeek.com/292914/what-is-developer-mode-in-windows-10

then use mklink without admin. Alternatively, PowerShell 6.2.0 (March 2019) or higher allow Symlink without admin:

New-Item -ItemType SymbolicLink -Path new.txt -Target old.txt
Zombo
  • 1
4

There is an open-source tool called SymlinkCreator that provides a minimal UI for drag-n-drop both files and folders to be symlinked. It can use both relative paths (if in the same drive) or absolute paths for symlinking. There is an option to retain the script used for symlinking.

enter image description here

Disclaimer: I am the author of SymlinkCreator. I created it for my personal use but then shared it with everyone.

arnobpl
  • 143
0

There isn't any need to install anything!

There exists a simple and open-source symlink_creator.bat file.

  • Drag & Drop desired file/folder onto that file.

  • It's open-source (see instructions), so, just Right click >Edit on file to see its content (only several lines) yourself. No extra .exe or .dll files need to be installed.

Batch File

::  ================================================================== ::
::  ========================  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   &quot;!isSameDrive!&quot;==&quot;yes&quot;  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

T.Todua
  • 4,053