将动态环境变量(%cd%)设置为Windows中文件或快捷方式的图标路径

将动态环境变量(%cd%)设置为Windows中文件或快捷方式的图标路径,windows,powershell,icons,relative-path,shortcut,Windows,Powershell,Icons,Relative Path,Shortcut,如何将文件的图标路径或快捷方式设置为包含动态环境变量的路径,尤其是当前目录%cd% 问题是为文件设置自定义(非系统)图标,而该图标仍在其他计算机上使用。文件和图标都将以.zip格式提供。在其他计算机上解压缩.zip时,该文件应显示自定义图标 我被卡住了,因为Windows需要一个绝对路径,而当.zip在另一台计算机上解压时(使用不同的绝对位置),这个路径会改变 我尝试过通过GUI属性窗口或使用PowerShell脚本,但没有成功 $wshshell = New-Object -ComObject

如何将文件的图标路径或快捷方式设置为包含动态环境变量的路径,尤其是当前目录%cd%

问题是为文件设置自定义(非系统)图标,而该图标仍在其他计算机上使用。文件和图标都将以.zip格式提供。在其他计算机上解压缩.zip时,该文件应显示自定义图标

我被卡住了,因为Windows需要一个绝对路径,而当.zip在另一台计算机上解压时(使用不同的绝对位置),这个路径会改变

我尝试过通过GUI属性窗口或使用PowerShell脚本,但没有成功

$wshshell = New-Object -ComObject WScript.Shell
$lnk = $wshshell.CreateShortcut("c:\TheFolder\ASubFolder\nameOfMyShortcut.lnk")
$lnk.TargetPath = "%windir%\system32\cmd.exe /c start \"\" \"Includes\myApplication.exe\""

$lnk.IconLocation = "%cd%\Includes\myApplication.ico"
#$lnk.IconLocation = ".\Includes\myApplication.ico"

$lnk.Save()
可以看出,有一个技巧可以使TargetPath对包文件夹的绝对位置不敏感

问题是如何设置IconLocation路径变量relative,这两个选项都不起作用:

$lnk.IconLocation = ".\Includes\myApplication.ico"


据我所知,环境变量%cd%是动态的,Windows不喜欢它。

解决问题的方法如下:使用C#(或静态二进制文件)创建启动器,它不需要在包的根文件夹中提供dll。启动程序启动位于资源文件夹中的动态二进制文件.exe。

%CD%
即使有效也没有用,因为您不知道显示图标的应用程序的当前目录是什么。(您似乎认为
%CD%
是包含快捷方式的目录。)对!所以,%cd%已经死了;如何为图标位置指定相对路径?快捷方式不支持图标位置的相对路径。您只需将所需的图标放在myApplication.exe中,它就会自动拾取。但我希望尽量减少文件夹中的文件数:仅应用程序启动器和包含库和资源文件的文件夹。我不想让人们对文件夹中的大量文件感到困惑。我不确定你的观点是什么。希望某事是真的并不能使它成为真的。快捷方式不支持您想要的功能。你得想出别的解决办法。
$lnk.IconLocation = "%cd%\Includes\myApplication.ico"