Можно ли создать ярлык, который указывает на определенный диск независимо от его буквы?

Я заметил, что я не могу использовать \\?\Volume{f993747a-5d7a-4de1-a97a-c20c1af1ba02}\path\to\target или же \Device\HarddiskVolume5\path\to\target как ярлыки - это не сработает. Это работает только тогда, когда я использую буквы дисков в абсолютных путях. Я не хочу использовать буквы дисков или относительные пути.

Могу ли я указать цель для ярлыка, который не сломается при изменении букв диска? Или я могу создать точку повторной обработки NTFS (например, точку соединения) для этого?

2 ответа

Решение

Можно ли создать ярлык, который указывает на определенный диск независимо от его буквы?

Я не хочу использовать буквы дисков или относительные пути

Тип целей, которые вы хотите использовать (\?\Volume{f993747a-5d7a-4de1-a97a-c20c1af1ba02}\path\to\target или же \Device\HarddiskVolume5\path\to\target) не являются допустимыми целями для ярлыка.

Все действительные цели для ярлыков должны использовать один из типов, указанных ниже.


Элементы предпочтений ярлыка позволяют настроить ярлык для объекта файловой системы (например, файла, папки, диска, общего ресурса или компьютера), объекта оболочки (например, принтера, элемента рабочего стола или элемента панели управления) или URL (например, веб-страница или FTP-сайт).

Источник Настройка элемента ярлыка


Или я могу создать точку повторной обработки NTFS (например, точку соединения) для этого?

Вы можете использовать mklink для создания символической ссылки в форме \\?\Volume{f993747a-5d7a-4de1-a97a-c20c1af1ba02}\path\to\target.txt

c:
md \test
cd \test
mklink testlink \\?\Volume{d1a54614-9369-11e4-b7ab-ccaf78b24c0a}\test\test.txt

Теперь тест каталога содержит символическую ссылку (которая в моем случае указывает на файл f:\test\test.txt на внешнем диске).

C:\test>dir
 Volume in drive C has no label.
 Volume Serial Number is C8D0-DF1E

 Directory of C:\test

29/03/2015  23:24    <DIR>          .
29/03/2015  23:24    <DIR>          ..
29/03/2015  23:17    <SYMLINK>      testlink [\\?\Volume{d1a54614-9369-11e4-b7ab-ccaf78b24c0a}\test\test.txt]
               1 File(s)              0 bytes
               2 Dir(s)  248,410,976,256 bytes free

...

C:\test>type testlink
this file is test.txt
C:\test>

...

C:\test>type f:\test\test.txt
this file is test.txt
C:\test>

Заметка

  • Это работает, только если вы пытаетесь разыменовать ссылку из командной строки, но не если вы пытаетесь получить к ней доступ из интерфейса проводника.

Дальнейшее чтение

Это немного взломано и, возможно, небезопасно, но вы должны иметь возможность настроить общий доступ к корневой папке интересующего диска (sharename floatdriveскажем) с соответствующими разрешениями на совместное использование, а затем создайте все ярлыки / ссылки, используя сетевой синтаксис URL на localhost:

\\localhost\floatdrive\folder\or\file\of\interest.txt

Пока Windows правильно подключает диск, возможно, имя общего ресурса будет следовать за диском, независимо от того, какая буква ему назначена. К сожалению, на данный момент у меня нет под рукой системы, подходящей для проверки этого.

Другие вопросы по тегам