Как «убедить» программы открыть настоящий файл .lnk в Windows 7?


37

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

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


3
Вы всегда можете переименовать его в .txt или что-то еще. Обычно это не приводит к потере каких-либо данных.
Джон

1
@ Chipperyman За исключением того, что это не работает. Вы не можете легко переименовать .lnkфайлы с новым расширением.
287352

Ответы:


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

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


Использование HxD, чтобы открыть его через, на File | Openсамом деле, похоже, открыло .lnkфайл. Спасибо.
Еж

@Jez Я обновил свой пост, добавив в него дополнительную информацию. Дайте мне знать, если у вас есть дополнительные вопросы.
and31415

16

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

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

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

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

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

Открытие 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!


2
Я хочу отредактировать его содержимое, предпочтительно в шестнадцатеричном редакторе, потому что я думаю, что оно может быть повреждено, и я не доверяю Проводнику, чтобы правильно сообщить мне его содержимое.
Jez

Я полагаю, что воссоздание это тогда? Если так, попробуйте один из редакторов, хотя я не уверен, что могло бы его испортить.
Джулиан Найт

1
Ну, это никогда не было трудно редактировать, по крайней мере, в Windows XP. Фактически было сложнее убедить программу относиться к ней аналогично символической ссылке. Запуск любого консольного приложения, например edit, с аргументом пути к ярлыку, откроет файл ярлыка. Программы, которые обрабатывают ярлык аналогично символической ссылке, сами разбирают его (возможно, через функции оболочки). Windows использовала символические ссылки, похожие на ярлыки после XP?
Руслан

Цена прогресса! Не имеет особого смысла иметь механизм для определения ссылок, которые большинство приложений затем игнорируют. Я не знаю многих причин, по которым нужно редактировать .lnk напрямую.
Джулиан Найт

3
@JulianKnight У меня был один раз для их программной генерации для размещения в папке, которая действовала как индекс. Я не должен был брать на себя никаких прав на установку программного обеспечения, но мы уже использовали VBA. Изменить шаблон .lnk оказалось проще, чем создать его с нуля.
Крис Х

4

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

notepad.exe shortcut.lnk

Нет, это не работает. Это открывает файл, на который .lnkуказывает.
Jez

В каком приложении вы пытаетесь открыть ссылку?
Уэс Сайед

3
Это неверно. Я попробовал этот ответ, и он работает.
Винаяк

3
@Vinayak Это довольно смелое утверждение. Это может работать для вас в ситуации, когда вы используете его, но это может не сработать для Jez.
Джон

1

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

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

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

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


1
Это не Windows, подсказывающая вам. Это Фрэд спрашивает вас, что делать
Винаяк

Совершенно верно: глупо с моей стороны - я изменю свой ответ.
AFH

Я считаю, что очень удобно помещать Блокнот в мое SendToменю, позволяя мне открывать любые файлы (включая ярлыки) в Блокноте.
Скотт

Заключительное (?) Наблюдение: любая программа просмотра или редактирования на основе DOS всегда открывает ссылку, а не цель, так как функция открытия файла DOS ничего не знает о ссылках, поэтому не делает никакой специальной обработки для них, в отличие от открытия файла Windows ,
AFH

1

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


0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.