Решение легко, если вы понимаете, что пакетные файлы не исполняются. Это cmd.exe
, который выполняет, а затем интерпретирует ваш пакетный скрипт. Имея это в виду, вы можете указать свой ярлык на cmd.exe
либо по его абсолютному полностью квалифицированному пути, либо по его традиционной переменной окружения %comspec%
(или %windir%\system32\cmd.exe
, если хотите).
И теперь, так как файл летучей мыши больше не цели но теперь аргумент, вы можете сделать это по отношению весь день. Красота заключается в том, что если ярлык перемещается вместе с папкой, содержащей пакетный скрипт, на другой диск и с другой глубиной, он все равно будет работать.
<# : batch portion
@echo off & setlocal
set "shortcutname=script.lnk"
set "shortcuttarget=DIR\Dependences\SCRIPT.bat"
powershell -noprofile "iex (${%~f0} | out-string)"
goto :EOF
: end batch/begin PowerShell hybrid code #>
$shortcut = (new-object -COM WScript.Shell).CreateShortcut($env:shortcutname)
$shortcut.TargetPath = "%comspec%"
$shortcut.Arguments = '/c "{0}"' -f $env:shortcuttarget
$shortcut.Save()
И для тех, кто интересно, как это можно применить к ярлыки, указывающие на то, кроме сценария .bat (таких как PDF документ, например), просто замените $shortcut.Arguments
линию с этим:
$shortcut.Arguments = '/c start "" "{0}"' -f $env:shortcuttarget
Пожалуйста, поделитесь своими впечатлениями (добавьте их в вопрос, отредактировав пост)! Во всяком случае, я не думаю, что это возможно с помощью быстрых клавиш * .lnk; [tag: batch-file], возможно, также не лучший выбор для создания таких ссылок ... – aschipfl