http://www.dropboxwiki.com/tips-and-tricks/sync-game-saves-across-multiple-computersを読んでいて、junction/mklinkはWindows 7でも動いていたのは知っていたのですが、どうやらWindows 10ではjunctionコマンドが引退してしまったようです
Windows10でシンボリックリンクを作る正しい方法とは?
119 red 2016-01-02
Windows10ではジャンクションコマンドが引退したようです
Windows SysInternals(マイクロソフトの一部)からjunctionをダウンロードすることができます
Junction を使用すると、NTFS ジャンクションを作成できるだけでなく、ファイルやディレクトリが実際にリパースポイントであるかどうかを確認することができます。リパースポイントは、NTFS ジャンクションがベースになっているメカニズムで、Windows のリモートストレージサービス (RSS) やボリュームマウントポイントで使用されています
ジャンクションを使用する際のヒントは、このMicrosoft KBの記事をお読みください
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
を使ってディレクトリシンボリックリンクを作成することができます
Notes:
junction
は、mklink
とは異なり、ジャンクションをリストアップしてファイルがジャンクションかどうかを判断することもできますmklink
はcmd
シェル内でのみ利用可能な内部コマンドですデフォルトでは、シンボリックリンクを作成するには管理者権限が必要です
他のユーザーにも付与することができます。セキュリティ設定「シンボリックリンクを作成する」で付与することができます
Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment\
Examples
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
Further Reading
- Windows CMD コマンドラインの A-Z インデックス – Windows cmd ライン関連のあらゆるもののための優れたリファレンス
- mklink – ディレクトリやファイルへのシンボリックリンクを作成する
134 DavidPostill 2016-01-02
権限のある管理者として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年とWindows10ではcmdコマンドや外部ダウンロードをいじくりまわしたくないですよね
Windows 10 は PowerShell 5 を搭載しており、シンボリックリンクの作成をビルトインでサポートしています
57 Peter Hahndorf 2016-07-30
シンボリックリンクを作成/編集するためのGUIツールが必要な場合は、http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.htmlを使用してください
リンクシェル拡張(LSE)は、ハードリンク、ジャンクション、ボリュームマウントポイント、Windows7/8のシンボリックリンク(ここでは総称してリンクと呼ぶ)の作成を提供します。LSEはその名の通り、シェル拡張機能として実装されており、Windowsエクスプローラや類似のファイル/フォルダマネージャからアクセスします。この拡張機能により、ユーザーは、1つまたは複数のファイルやフォルダを選択し、マウスを使って、必要なリンク(ハードリンク、ジャンクション、シンボリックリンク)を作成したり、フォルダの場合はハードリンクやシンボリックリンクからなるクローンを作成したりすることができます。LSEは、Windows XP64、Windows7/8/10を含む、NTFSバージョン5.0以降をサポートするすべてのWindowsでサポートされています。ハードリンク、ジャンクション、シンボリックリンクはFATファイルシステムではサポートされておらず、クローン作成とスマートコピープロセスもFATファイルシステムではサポートされていません
19 odvpbre 2016-10-24
Windows 10のビルド14972(2016年12月)以上をお持ちの場合
で開発者モードを有効にすることができます
の場合は、adminなしでmklink
を使用します。あるいは、PowerShell 6.2.0 (2019年3月) 以降では、管理者なしで Symlink を使用することができます
New-Item -ItemType SymbolicLink -Path new.txt -Target old.txt
0 Steven Penny 2020-07-01
何もインストールする必要はありません!
シンプルでオープンソースのsymlink_creator.batファイルが存在します
そのファイルにドラッグ&ドロップします
これはオープンソースの(説明書を参照)なので、ファイルの右クリック>Editをするだけで(数行だけ)その内容を自分で見ることができます。余分な
.exe
や.dll
ファイルをインストールする必要はありません
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 "!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
0 T.Todua 2018-03-19