Переменная окружения в ярлыке .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

Вы по-прежнему сможете создать ярлык с переменной среды, используя COM-объект из VBScript или PowerShell. Метод "Создать ярлык" (более подробно также для аргументовздесь) способен на это. Хотя изначально это было решение на 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% будет преобразован в путь ярлыка «Start in». Очистите «Start in» для %CD%, чтобы преобразование в путь ярлыка.
  • Если командная строка Target слишком длинная для 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 всегда будет предотвращать расширение переменных target/destination. Они часто расширяются при создании .lnk (или при его использовании), но их можно вставить заново и затем поддерживать, защищая от записи .lnk перед его использованием (в следующий раз).

Связанный контент