如何“说服”程序在Windows 7中打开实际的.lnk文件?


37

一个.lnk在Windows文件是打算成为一个快捷方式到另一个文件的实际文件。但是,我确实希望查看.lnk文件本身的内容。我发现这样做实际上是不可能的。无论我尝试什么,我的应用程序都会打开它指向的文件的内容(拖放到文本或十六进制编辑器中,文件|从文本或十六进制编辑器中打开等)。

有什么方法可以告诉程序实际打开.lnk文件而不是它指向的文件?


3
您始终可以将其重命名为.txt或其他名称。通常,这不会导致其丢失任何数据。
2014年

1
@Chipperyman除非那行不通。您无法轻松地.lnk使用新扩展名重命名文件。
287352年

Answers:


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 Shell解析和解释。从官方文档中:

Shell链接结构存储了对最终用户有用的各种信息,包括:

  • 可用于启动应用程序的键盘快捷键。

  • 描述性评论。

  • 控制应用程序行为的设置。

  • 可选数据存储在额外的数据部分中

来源:[MS-SHLLINK]:Shell链接(.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 2014年

@Jez我已经更新了我的帖子,以包括一些其他信息。如果您还有其他问题,请告诉我。
and31415 2014年

16

我已经尝试过了,它在Windows 8.1上对我有效:

LNK在记事本中打开文件:

  • 只需将它们拖放到“记事本”窗口中即可。如果从Open对话框中打开它们,则记事本将打开EXE文件指向的LNK文件。

LNKHxD十六进制编辑器中打开文件:

  • 使用打开对话框(FileOpen)像打开任何文件一样打开它们

LNK使用命令提示符打开文件:

  • 导航到包含LNK文件的文件夹,然后键入以下命令: TYPE SHORTCUTNAME.LNK

LNK在几乎任何程序中打开文件:

  • 启动命令提示符,导航到程序所在的文件夹,使用以下命令: PROGRAM_NAME.EXE "path to LNK file"

8

.lnk文件的全部要点是Windows会将其视为到另一个文件的链接,因此应该很难编辑!

如果您描述了为什么要编辑它,也许会有所帮助。您可以通过右键单击并选择属性来更改.lnk文件的设置。

如果您确实要编辑它,则需要一个特殊的工具。其中包括:

注意:我没有尝试过其中任何一种,只是用Google搜索了它们。

更新:

不知道为什么我以前没有想到这一点,但是您可以通过PowerShell编辑属性。从上一个关于Stack Overflow的答案开始

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

由于它使用Shell COM对象,因此您也可以在Office中使用WSH甚至VBA来执行此操作!


2
我想编辑其内容,最好使用十六进制编辑器,因为我认为它可能已损坏,并且我不相信Explorer会正确告诉我其内容。
Jez 2014年

我想重新创建它了吗?如果是这样,请尝试其中一个编辑器,尽管我不确定是什么会损坏它。
朱利安·奈特

1
好吧,至少在Windows XP中,从来就不难编辑。实际上,要说服程序像对待符号链接一样,要困难得多。运行任何控制台应用程序(例如edit,带有path的快捷方式参数)将打开快捷方式文件。像对待符号链接一样对待快捷方式的程序也会自己解析(也许通过shell函数)。Windows在XP之后是否使用了类似于快捷方式的符号链接?
Ruslan 2014年

进步的代价!拥有一种机制来定义大多数应用程序随后会忽略的链接并没有多大意义。我不知道需要直接编辑.lnk的许多原因。
朱利安·奈特

3
@JulianKnight我曾经用过一次以编程方式生成它们以放置在充当索引的文件夹中。我不必承担安装软件的权利,但是我们已经在使用VBA。事实证明,修改模板.lnk比从头生成模板更容易。
克里斯H

4

.LNK文件由外壳程序解释。如果打开命令提示符并使用.LNK文件作为参数调用编辑工具(例如,以记事本为例),则应绕过外壳程序并打开.LNK文件本身的内容。

notepad.exe shortcut.lnk

不,那是行不通的。它将打开.lnk指向的文件。
Jez

您尝试在哪个应用程序中打开链接?
Wes Sayeed

3
那是不对的。我试过这个答案,它确实起作用。
Vinayak 2014年

3
@Vinayak这是一个非常大胆的声明。在您使用它的情况下,它可能对您有用,但对Jez而言可能不起作用。
2014年

1

如果使用CMD以链接文件作为参数运行程序,则该参数将逐字传递给程序。由程序决定如何处理链接。

我已经使用免费(便携式)十六进制编辑器FRHED进行了测试:当您从命令行运行它时,将链接作为参数传递,它提示您是否要打开链接到(Yes)的文件,即链接本身(),或取消

奇怪的是,如果您在FRHED File菜单中使用Open ,它会打开目标文件而不会询问。

在XP上,我的SendTo上下文菜单中有FRHED,其工作方式与CMD相同。我想象Win7是类似的(我将Win7系统用于专用应用程序,并且如上所述,我将对其进行简单的测试,但是我不会弄乱它的配置)。


1
Windows不会提示您。那是弗雷德(Frhed)问你该怎么做
Vinayak

完全正确:我很傻-我将更改答案。
AFH 2014年

我发现将记事本放入SendTo菜单非常有用,可以让我在记事本中打开任何文件(包括快捷方式)。
斯科特(Scott)

最终(?)观察:任何基于DOS的视图或编辑程序都将始终打开链接,而不是目标,因为DOS文件打开功能对链接一无所知,因此与Windows文件打开不同,对链接不做任何特殊处理。
AFH 2014年

1

如果您有理由经常编辑此类文件,请将notepad.exe的快捷方式添加到SendTo文件夹中(在Win 7中:C:\ Users \ USER \ AppData \ Roaming \ Microsoft \ Windows \ SendTo)。这样可以从您的Rt中获取“发送到notepad.exe”。单击上下文菜单。.ink文件将打开,可以编辑,并保存在notepad.exe中。


0

.lnk文件只是文件,直到更高级别的组件(例如Explorer.EXE)为其分配了文件。在较低的(NTFS)级别,它们仍然具有包括数据流在内的常规结构。特别是,整个内容都在foo.lnk::$DATA流中。并非所有高级工具都可以识别该语法。如果他们只是假设这是一个奇怪的文件名并将其传递,他们将获得.lnk内容。

例如在命令行MORE < foo.lnk::$DATA > con上将打印数据,但是有点乱码(部分是二进制的)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.