35

Файл .lnk в Windows - это фактический файл, предназначенный для ярлыка другого файла. Однако я действительно хочу просмотреть содержимое самого файла .lnk . Я считаю, что это буквально невозможно сделать; Независимо от того, что я пытаюсь, мои приложения открывают содержимое файла, на который он указывает (перетаскивание в текстовый или шестнадцатеричный редактор, файл | открытие из текстового или шестнадцатеричного редактора и т. д.)

Можно ли как-то сказать программе, чтобы она открывала файл .lnk вместо того файла, на который он указывает?

7 ответов7

19

Открытие ярлыков

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

"X:\Path\to\program.exe" "X:\my shortcut.lnk"

Однако, будет ли загружена цель ссылки или фактический файл ярлыка, зависит от программы. Вот список (в произвольном порядке) некоторых бесплатных шестнадцатеричных редакторов, которые поддерживают их из коробки:


Временное решение

В случае , если вы не может загрузить содержимое ярлыка файла, вы можете открыть командную строку и переименовать файл .lnk к другому, несуществующему расширению , например, .lne

cd /d "X:\Folder\containing\shortcuts"
ren "my shortcut.lnk" "my shortcut.lne"

Если у вас есть несколько файлов, вы также можете переименовать их все сразу:

ren *.lnk *.lne

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


Дополнительная информация

Ярлык, или ссылка оболочки, содержит информацию метаданных, используемую для доступа к определенной цели ссылки. Он анализируется и интерпретируется оболочкой Windows. Из официальной документации:

Структура ссылок оболочки хранит различную информацию, которая полезна для конечных пользователей, включая:

  • Сочетание клавиш, которое можно использовать для запуска приложения.

  • Описательный комментарий.

  • Настройки, которые управляют поведением приложения.

  • Дополнительные данные хранятся в дополнительных разделах данных.

Источник: [MS-SHLLINK]: Shell Link (.LNK) двоичный формат файла - обзор

Ярлыки хранятся в виде двоичных файлов, и их нельзя редактировать с помощью стандартного текстового редактора. Типичный файл .lnk выглядит примерно так:

00000000  4C 00 00 00 01 14 02 00 00 00 00 00 C0 00 00 00  L...........À...
00000010  00 00 00 46 DC 03 00 02 20 00 00 00 C6 EF 52 BE  ...FÜ... ...ÆïR¾
00000020  10 04 CA 01 C6 EF 52 BE 10 04 CA 01 60 45 8A 67  ..Ê.ÆïR¾..Ê.`EŠg
00000030  20 04 CA 01 00 9A 04 00 00 00 00 00 01 00 00 00   .Ê..š..........

Первые двадцать байтов всегда следующие:

4C 00 00 00 01 14 02 00 00 00 00 00 C0 00 00 00 00 00 00 46

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

16

Я попробовал это, и это работает для меня на Windows 8.1:

Открытие файлов LNK в Блокноте:

  • Просто перетащите их в окно блокнота. Если вы откроете их из диалогового окна « Open », «Блокнот» откроет файл EXE который указывает файл LNK .

Открытие файлов LNK в шестнадцатеричном редакторе HxD:

  • Откройте их, как любой другой файл, используя диалоговое окно «Открыть» (« File → « Open).

Открытие файлов LNK с помощью командной строки:

  • Перейдите в папку, содержащую файлы LNK и введите команду:TYPE SHORTCUTNAME.LNK

Открытие файлов LNK в любой программе:

  • Запустите командную строку, перейдите в папку, где находится программа, используйте команду: PROGRAM_NAME.EXE "path to LNK file"
8

Весь смысл файла .lnk для Windows , чтобы рассматривать его в качестве ссылки на другой файл , поэтому оно должно быть трудно изменить!

Возможно, это помогло бы, если бы вы описали ПОЧЕМУ вы хотите изменить его. Вы можете изменить настройки файла .lnk, щелкнув правой кнопкой мыши и выбрав Свойства.

Если вы действительно хотите отредактировать его, вам нужен специальный инструмент. Есть несколько из них, в том числе:

NB: Я не пробовал ничего из этого, просто погуглил их.

ОБНОВИТЬ:

Не знаю, почему я не думал об этом раньше, но вы можете редактировать свойства через PowerShell. Из этого предыдущего ответа о переполнении стека:

Copy-Item $sourcepath $destination  ## Get the lnk we want to use as a template
$shell = New-Object -COM WScript.Shell
$shortcut = $shell.CreateShortcut($destination)  ## Open the lnk
$shortcut.TargetPath = "C:\path\to\new\exe.exe"  ## Make changes
$shortcut.Description = "Our new link"  ## This is the "Comment" field
$shortcut.Save()  ## Save

Поскольку для этого используется COM-объект Shell, вы также можете сделать это с помощью WSH или даже VBA в Office!

4

,LNK-файлы интерпретируются оболочкой. Если вы откроете командную строку и вызовете инструмент редактирования (скажем, «Блокнот»), используя.LNK-файл в качестве аргумента, который должен обходить оболочку и открывать содержимое.Сам файл LNK.

notepad.exe shortcut.lnk
1

Если у вас есть причина часто редактировать такие файлы, добавьте ярлык к notepad.exe в папку SendTo (в Win 7: C:\Users\USER\AppData\Roaming\Microsoft\Windows\SendTo). Это делает «Отправить на notepad.exe» доступным с вашего Rt. Нажмите контекстное меню. Откроется файл .ink, который можно отредактировать и сохранить в notepad.exe.

1

Если вы используете CMD для запуска программы с файлом ссылки в качестве параметра, этот параметр передается программе дословно. Программа сама решает, как обращаться со ссылкой.

Я проверил это с помощью FRHED, бесплатного (и переносимого) шестнадцатеричного редактора: когда вы запускаете его из командной строки, передавая ссылку в качестве параметра, он запрашивает, хотите ли вы открыть файл, связанный с (Да), саму ссылку (Нет) или Отмена.

Как ни странно, если вы используете Open в меню FRHED File, он открывает целевой файл без запроса.

В XP у меня есть FRHED в моем контекстном меню SendTo , и это работает так же, как CMD. Я предполагаю, что Win7 похож (я использую систему Win7 для отдельного приложения, и я буду делать простые тесты на нем, как указано выше, но я не связываюсь с его конфигурацией).

0

Файлы .lnk - это просто файлы до компонента более высокого уровня, такого как Explorer.EXE назначает им штатное расписание. На более низком уровне (NTFS) они по-прежнему имеют нормальную структуру, включая поток данных. В частности, весь контент находится в foo.lnk::$DATA . Не все инструменты более высокого уровня распознают этот синтаксис. Если они просто предполагают, что это странное имя файла и передают его, они получат содержимое .lnk.

Например, в командной строке MORE < foo.lnk::$DATA > con печатает данные, но это немного бессмысленно (части являются двоичными)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .