从 lua 创建 lnk 快捷方式(没有 lfs)

Create lnk shortcut from lua (without lfs)

我想编写一个函数,从我的 lua 脚本创建一个 windows .lnk 文件。我在 LuaFileSystem library 中找到了一个函数。有没有办法在没有图书馆的情况下做到这一点? (原因:我正在为多个用户编写脚本,如果我们不必在每台机器上都安装该库就好了。)

感谢您的帮助!

创建快捷方式(.lnk 文件)

-- your .lnk file
local your_shortcut_name = "your_shortcut.lnk"      

-- target (file or folder) with full path
local your_target_filespec = [[C:\Windows\notepad.exe]]

local ps = io.popen("powershell -command -", "w")
ps:write("$ws = New-Object -ComObject WScript.Shell;$s = $ws.CreateShortcut('"..your_shortcut_name.."');$s.TargetPath = '"..your_target_filespec.."';$s.Save()")
ps:close()

要创建符号链接,只需使用 os.execute"mklink ..."

使用luacom比powershell快

local luacom=require'luacom'
local shortcut_file_path='test_create_shortcut.lnk'
local target_file_path=arg[0]
local shellObject=luacom.CreateObject("WScript.Shell")
local shortcut=shellObject:CreateShortcut(shortcut_file_path)
shortcut.TargetPath=target_file_path
shortcut:Save()
assert(io.open(shortcut_file_path)):close()--shortcut file exist now
os.remove(shortcut_file_path)

并使用FileSystemObject object (another COM), or Windows shell link file format spec for Kaitai Struct(解析二进制文件结构以获取有关各种文件格式的信息)来检索快捷方式信息。 'lfs' 现在做不到。

参见:Create a desktop shortcut with Windows Script Host - Windows Client | Microsoft Docs LuaCOM User Manual (Version 1.3)