Пакетная: как mklink с аргументами? - PullRequest
0 голосов
/ 19 марта 2020

Как создать в , включая аргументы, используя , (и не ) ?

Я хочу создать на Desktop ссылку OpenVPN, которая ссылается на "C:\Program Files\OpenVPN\bin\openvpn-gui.exe", с аргументом: --connect client.ovpn

Итак, я попытался:

  1. cd %homepath%\Desktop && mklink "OpenVPN GUI" "C:\Program Files\OpenVPN\bin\openvpn-gui.exe --connect client.ovpn"
    FAILED -> символическая ссылка создана, но не может указать на .exe.

  2. cd %homepath%\Desktop && mklink "OpenVPN GUI" ""C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect client.ovpn"
    FAILED -> Очевидно, синтаксис ошибка.

  3. Попытка использовать escape-символ ^ и \: cd %homepath%\Desktop && mklink "OpenVPN GUI" "^"C:\Program Files\OpenVPN\bin\openvpn-gui.exe^" --connect client.ovpn"
    FAILED.

  4. Я пытался установите переменную set patharglink="C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect client.ovpn и используйте ее mklink "OpenVPN GUI" %patharglink%
    FAILED.

Есть идеи, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Я нашел способ создать ярлык (не символьную c ссылку, как указывали другие) с аргументами, в основном через эту ветку .

Идея состоит в том, чтобы вызвать сценарий VB, потому что есть легкая реализация для ярлыков:

:: make sure the linkpath exists:
if not exist "%linkpath%" md "%linkpath%"

:: create temporary VBScript ...
echo Set objShell=WScript.CreateObject("Wscript.Shell")>%temp%\MakeShortCut.vbs
echo Set objShortcut=objShell.CreateShortcut("%linkpath%\%linkname%.lnk")>>%temp%\MakeShortCut.vbs
echo objShortcut.TargetPath="%progpath%\%progexe%.exe">>%temp%\MakeShortCut.vbs
echo objShortcut.Arguments="%arguments%">>%temp%\MakeShortCut.vbs
echo objShortcut.Description="%description%">>%temp%\MakeShortCut.vbs
echo objShortcut.WorkingDirectory="%progpath%">>%temp%\MakeShortCut.vbs
echo objShortcut.Save>>%temp%\MakeShortCut.vbs

::... run it ...
cscript //nologo %temp%\MakeShortCut.vbs

::... and delete it.
del %temp%\MakeShortCut.vbs

Таким образом, вы захотите установить следующие переменные перед запуском этих строк:

  • %linkpath% - это путь, по которому создается ярлык
  • %linkname% - это имя ярлыка
  • %progpath% - это путь к вашему исполняемому файлу
  • %progname% - это имя вашего исполняемый файл
  • %arguments%
  • %description%

%temp% не устанавливается, это переменная среды

примечание: Я немного изменил этот код из кода, который я использую, так как у меня есть специальное c использование для него в моем коде, и не проверял, сделал ли я здесь опечатку. Если кто-то использует это, и это работает, пожалуйста, удалите эту заметку

1 голос
/ 20 марта 2020

Вот полный , для создания ярлыка , без символов c ссылка , вам требуется.

;@If Not Exist "%UserProfile%\Desktop\OpenVPN.lnk" (
;   "%__AppDir__%rundll32.exe" advpack.dll,LaunchINFSection "%~0",,1)
;@GoTo :EOF
[Version]
Signature="$Windows NT$"
[DefaultInstall]
ProfileItems=AddLnk
[AddLnk]
Name="OpenVPN",8,16
CmdLine=16422,"OpenVPN\bin\openvpn-gui.exe"," --connect client.ovpn"
InfoTip="Connect OpenVPN using client config file"
WorkingDir=0

Просто сохраните вышеуказанное как OVPNLink.cmd и дважды щелкните по нему!

...