我想创建一个 Windows 快捷方式,javaw.exe
在可变目标. 这个目的地是我的系统环境变量的内容%MY_OWN_JAVA_HOME%
。
我尝试过这样做:
- 右键单击文件夹(使用 Windows 资源管理器)
New
=>Shortcut
- 目的地:
%MY_OWN_JAVA_HOME%\bin\javaw.exe -cp ......
Next
,Finish
问题是,环境变量是创建时计算。当我打开此环境变量的设置时,当前的使用该变量的值。
我如何将变量保留为快捷方式的目的地?
答案1
您仍然应该能够使用 VBScript 或 powershell 中的 COM 对象创建具有环境变量的快捷方式。方法“创建快捷方式“(更多细节也适用于参数)这里) 可以做到这一点。虽然最初是一个 vbscript 解决方案,但您可以从 powershell 提示符中调用它,如下所示:
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("C:\Users\Public\Desktop\My Java Shortcut.lnk")
$Shortcut.TargetPath = "%MY_OWN_JAVA_HOME%\javaw.exe"
$Shortcut.Arguments = "-cp"
$Shortcut.Save()
请注意,参数不会进入目标路径。如果您的环境变量包含空格,它也可能不起作用。这样做的好处是您确实有一个真正的快捷方式而不是一些包装器,缺点是您永远无法通过其属性对话框更改此快捷方式。一旦您这样做,变量就会再次被替换。
如果你想要一个包装器,我建议你使用一个完全无声的 vbs 文件。创建一个新的文本文件并粘贴以下行
CreateObject("WScript.Shell").Run """%MY_OWN_JAVA_HOME%\bin\javaw.exe"" -cp", , False
在那里,将其保存为“runmyjava.vbs”,然后创建该文件的快捷方式,这样它就不会出现黑色弹出窗口,哪怕是一瞬间。请注意可执行文件路径后面的额外“”。只有当环境变量包含空格时才需要这些。
答案2
一个解决方案是使用.lnk
在 Windows XP 中创建的快捷方式文件。这些快捷方式会将您的变量保留在快捷方式目标中 - 即使您更改了目标。
另一个解决方案是,正如@DavidPostill 在评论中所建议的,使用如下批处理文件作为快捷方式目标:
@echo off
start "" "%MY_OWN_JAVA_HOME%\bin\javaw.exe" %*
然后在快捷方式选项中选择“最小化”。
该解决方案工作正常,但会打开一秒钟最小化的 cmd 弹出窗口。
答案3
建立一个快捷方式,其中“目标”是“cmd /k”,运行“start "" /B”来运行您的应用程序。
命令处理器 (cmd) 将解析环境变量并在 Start 完成后关闭。Start 将“不带”窗口运行应用程序(尽管它仍然闪烁)。
笔记:
- 命令希望程序 (启动) 和程序的参数只有一个参数
- 开始希望为程序和程序的参数提供单独的参数
- %CD% 将解析为快捷方式的“起始于”路径。清除 %CD% 的“起始于”即可解析为快捷方式的路径。
- 如果目标命令行对于 Explorer/WshShell 来说太长,您将需要使用另一个库(例如 liblnk)构建快捷方式或回退到调用单独的批处理文件。
cmd /k "<<START COMMAND>>"
cmd /k "start "" /B "<<PROGRAM>>" <<PROGRAM ARGUMENTS>>"
cmd /K "start "" /B "%MY_OWN_JAVA_HOME%\bin\javaw.exe" %*"
答案4
我想建议另一种解决方案,它在 Windows Vista 中有效,尽管我不知道它是否适用于较新的 Windows 版本:根据我的经验,对 .lnk 文件进行写保护将始终阻止目标/目标变量被扩展。它们通常在创建 .lnk 时(或使用时)被扩展,但可以在使用 .lnk 之前(下次)通过对 .lnk 进行写保护来重新插入并维护它们。