2016-03-03 6 views
1

У меня проблема, что я не нашел решение после 1 часа поиска в сети!Сделать относительный ярлык для относительной цели

Ситуация: У меня есть каталог \DIR В этом каталоге у меня есть SCRIPT.lnk что я хотел бы нацеливание \DIR\Dependences\SCRIPT.bat но папка \DIR будет переносимым (в USB-ключа или любого другого случайного каталога).

У вас есть решение сделать их родственниками? Я пробовал несколько типов синтаксиса, но никто не работает.

+0

Пожалуйста, поделитесь своими впечатлениями (добавьте их в вопрос, отредактировав пост)! Во всяком случае, я не думаю, что это возможно с помощью быстрых клавиш * .lnk; [tag: batch-file], возможно, также не лучший выбор для создания таких ссылок ... – aschipfl

ответ

1

Решение легко, если вы понимаете, что пакетные файлы не исполняются. Это 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 
+0

ладно, спасибо, но, я хотел бы knwo, где я должен записать сценарий, который вы мне дали? –

+0

О, все в порядке, я просто не понимаю, что я делаю партию только с этим кодом, и это делает меня новым ярлыком. Спасибо, много! –

+0

Но у меня все еще есть проблема, это работает отлично, но если я пометил «run as admin» в моей ярлыке bat, файл bat не запустится ... любое решение для этого? :) –