Windows 如何打开和编辑.lnk文件

本文介绍了如何在Windows系统中查看和编辑.lnk快捷方式文件,尝试了多种方法,包括使用文本编辑器、十六进制编辑器以及Python的第三方库LnkParse3和pylnk。最终,成功通过 LnkParse3 和 pylnk 库实现了查看和编辑.lnk文件内容,其中pylnk还支持创建和修改.lnk文件。
摘要由CSDN通过智能技术生成

一、背景

  • Windows系统中,快捷方式是最最常见的文件了。
    .lnk后缀的文件,后缀可能是隐藏的)
  • 点击.lnk后缀的文件,会打开其关联的目标对象。
    (目标对象可以是本地或网络程序、文件、文件夹、计算机、Internet 地址等等)
  • 大多数人永远都不会需要打开.lnk文件进行查看或编辑它。
    注意这里说的是.lnk文件本身,而不是它链接的目标文件,当然也不是在说右键>属性查看/编辑.lnk文件属性
  • 我也差点成为大多数人中的一员,直到前几天我在写一个批处理时,发现命令提示符.lnk快捷方式打开的dos窗口,与cmd.exe 程序打开的dos窗口,两者窗口的属性配置竟然不一致,后者的属性配置是从注册表加载的,而前者属性配置会不会是从.lnk文件本身读取的呢?
    (如果你从没有修改过cmd.exe.lnk打开的dos窗口的属性,那它们的属性配置都是默认值,都一样。这里就不细说了,感兴趣的可以看我的另一篇文章:Windows 不同方式打开的cmd/dos窗口属性配置不同

为了探究命令提示符.lnk文件中是否存储了dos窗口属性配置信息,于是我有了想要查看.lnk文件内容的需求,接下来就我尝试多的几种方案做下总结。

二、查看/修改.lnk文件内容

(温馨提示:方案1~4 都是失败的方案,方案5 才是成功的方案,你可以直接跳到 方案5

方案1:用type命令查看

通过type命令在DOS窗口查看.lnk文件内容
格式:type path_to_lnk_file
使用type命令查看.lnk文件内容
或者结合重定向将内容输出到.txt文件中,示例:

C:\Users\cyinl>type Desktop\cmd.lnk > cmd_content.txt

总结:方案1,输出文件内容是乱码,基本没法看,更别说修改了。。。不可取

方案2:更改.lnk文件后缀为.txt再查看

因为多数人电脑上.lnk后缀不显示,所以重命名改后缀的方式不太可行,
这里推荐使用cp命令复制.lnk文件,新文件使用.txt后缀,示例:

C:\Users\cyinl>copy Desktop\cmd.lnk cmd_content2.txt
已复制         1 个文件。

在这里插入图片描述
总结:方案2,查看到的内容也是乱码,不可取。(实质上跟方案1中的重定向生成的.txt文件一样)

方案3:用记事本NodePad++打开

注意:不要用 文件>打开 的方式打开,而是直接把.lnk文件拖到记事本或NodePad++窗口
用nodepad++打开lnk文件
你也可以在dos窗口,使用编辑器应用程序运行.lnk文件,如使用notepad.exe程序,打开.lnk文件:

C:\Windows\System32>notepad.exe C:\users\cyinl\Desktop\cmd.lnk

在这里插入图片描述

总结:方案3,查看到的内容也是乱码,不可取

方案4:使用HxD hex editor十六进制编辑器

HxD官网下载地址:HxD hex editor
HxD 下载安装完成后,通过拖拽或文件>打开方式,打开.lnk文件
HXD打开lnk文件
总结:方案4,以十六进制打开lnk文件,但是转换出来的文本仍有乱码,阅读性差。虽然查看及编辑lnk文件,但是一般人真编辑不来。。。不可取

方案5:使用第三方库查看或编辑

在Python的库里我体验了几个.lnk相关的库,这里推荐两个觉得不错的。
建议可以先了解下关于.lnk二进制文件格式的有关知识:
[MS-SHLLINK]: Shell Link (.LNK) Binary File Format

1. Matmaus/LnkParse3

GitHub仓库:Matmaus/LnkParse3

特点:

  1. 简单易用,官网文档详细;
  2. 解析lnk文件输出信息比较全,格式也漂亮;
  3. 支持cli、python package 两种使用方式;
  4. 但这个库仅解析lnk文件,不支持编辑或创建。

详细的介绍、安装和使用方式见官网
这里使用 python package 方式演示,cli命令行的方式参考官网自行体验吧。

# -*- coding:utf-8 -*-
import LnkParse3
with open("C:\\Users\cyinl\Desktop\cmd.lnk","rb") as lf:
    ldata = LnkParse3.lnk_file(lf)
    print(ldata.get_json())    # 获取解析数据,未格式化的json格式
    ldata.print_json()         # 打印输出格式化后的json数据
    ldata.print_lnk_file()     # 打印输出文本形式的数据,也有漂亮的格式

获取.lnk文件解析内容的方式如下:

1)get_json()输出解析内容(无格式化)
{
   'header': {
   'guid': '00021401-0000-0000-C000-000000000046', 'r_link_flags': 989, 'r_file_flags': 0, 'creation_time': None, 'accessed_time': None, 'modified_time': None, 'file_size': 0, 'icon_index': 0, 'windowstyle': 'SW_SHOWNORMAL', 'hotkey': 'UNSET - UNSET {0x0000}', 'r_hotkey': 0, 'link_flags': ['HasTargetIDList', 'HasName', 'HasRelativePath', 'HasWorkingDir', 'HasIconLocation', 'IsUnicode', 'ForceNoLinkInfo', 'HasExpString'], 'file_flags': []}, 'data': {
   'description': '@%windir%\\system32\\shell32.dll,-22534', 'relative_path': '..\\..\\..\\WINDOWS\\system32\\cmd.exe', 'working_directory': '%HOMEDRIVE%%HOMEPATH%', 'icon_location': '%windir%\\system32\\cmd.exe'}, 'extra': {
   'SPECIAL_FOLDER_LOCATION_BLOCK': {
   'size': 16, 'special_folder_id': 37, 'offset': 221}, 'KNOWN_FOLDER_LOCATION_BLOCK': {
   'size': 28, 'known_folder_id': '1AC14E77-02E7-4E5D-B744-2EB1AE5198B7', 'offset': 221}, 'ENVIRONMENTAL_VARIABLES_LOCATION_BLOCK': {
   'size': 788, 'target_ansi': '%windir%\\system32\\cmd.exe', 'target_unicode': '%windir%\\system32\\cmd.exe'}, 'CONSOLE_PROPERTIES_BLOCK': {
   'size': 204, 'fill_attributes': 15, 'popup_fill_attributes': 181, 'screen_buffer_size_x': 110, 'screen_buffer_size_y': 6000, 'window_size_x': 110
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小青龍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值