.lnk 捷徑中的環境變數

.lnk 捷徑中的環境變數

我想建立一個 Windows 快捷方式,該快捷方式已開啟javaw.exe可變目的地。這個目的地是我的系統環境變數的內容%MY_OWN_JAVA_HOME%

我嘗試這樣做:

  1. 右鍵單擊資料夾(使用 Windows 資源管理器)
  2. New=>Shortcut
  3. 目的地:%MY_OWN_JAVA_HOME%\bin\javaw.exe -cp ......
  4. 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 將在「沒有」視窗的情況下運行應用程式(儘管它仍然對我來說閃爍)。

筆記:

  • 命令想要程式(啟動)和程式的參數有一個參數
  • 開始想要程式的單獨參數和程式的參數
  • %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 來維護它們。

相關內容