Ярлыки в Windows используют абсолютные пути. То есть вроде бы, как-то, вооружившись идеальным английским и накачанным виагрой напильником для реестра, можно заставить их понимать пути относительные. По слухам. Но реальность такова, что использовать ярлыки на флешке, или в какой-то структуре папок, которая может менять свое местоположение, нельзя. Это понятно: если мы задали путь E:\папка, а на другом компьютере наш флеш-драйв поимел букву диска уже M, то путь неверен, и ничего тут не попишешь.Какие решения? Их, в общих чертах, два: использовать сторонние лончеры или командные файлы. Первое решение недостаточно гибко, да и не встречал я еще лончера, такого, чтобы ах, а второе… Не терплю мигающие окна, которые неизбежно порождает интерпретатор cmd.exe. Неаккуратненько как-то. Можно и этот риф обойти, но опять громоздить сторонние программы, опять в гамаке и стоя. Ах, да - есть еще vb и js скрипты. Да, это посимпатичней. Но все-таки.

Однако человеческий гений, как известно, не только гнет взглядом сталь, но, поднатужившись, может даже воздерживаться от алкоголя весь вечер. Решение состоит в вызове функции соответствующей библиотеки. Поскольку библиотеки (dll) сами по себе из командной строки не вызываются, следует использовать команду (имя программы, на самом деле) rundll32. То есть вы создаете обычный ярлык, в строке запуска (поле Объект в свойствах) которого пишете строку вида: %windir%\system32\RunDll32.exe shell32.dll,ShellExec_RunDLL ".\папка\файл". Обратите внимание на точку перед первым слешем. Обязательно оставьте поле Рабочая папка пустым, и путь будет читаться относительно положения самого ярлыка. Напоминаю, что для перехода в родительскую папку вместо одной точки в начале надо ставить две, “..\..\” - на два уровня вверх и так далее.

Есть вероятность, что могут возникнуть проблемы у пользователей с урезанными правами, не проверял. Сообщите, если да.

  
Электронная книга: как правильно выбрать?
В настоящее время, электронные книги среди многих пользователей становятся всё более и более популяр
Какой правильно выбирать планшетный ПК?
Подобрать планшетный ПК достаточно непросто. Сегодня присутствует множество предложений, среди котор
Влияние музыки на человека трудно переоценить
Лечите душу ощущениями и…музыкой. Влияние музыки на человека поистине значительное, и это факт, о

42 комментариев на «Относительный путь в ярлыке»

  1. Kirill пишет:

    при открытие ярлыка не из файлового менеджера, а программно (из своего программного кода) метода не работает:(

    • павел рындин пишет:

      Мм… То есть при попытке запустить созданный по такому рецепту ярлык? Не пробовал. Может проще будет обойтись без таких ярлыков, раз уж все равно программа пишется?

      • Ева пишет:

        а как в чемаксе в Dragone Age прописать если там написыно Зaпycтитe игpy c пapaмeтpoм -enabledeveloperconsole.
        Для этoгo, в яpлыкe к зaпycкy игpы дoбaвьтe eгo пocлe кaвычeк.
        Пpимep, “C:\Games\Dragon Age\bin_ship\daorigins.exe” -enabledeveloperconsole
        я это не пойму

  2. роман пишет:

    Спасибо за совет. попробовал, получилось.
    Но возникли проблемы когда попытался создать ярлык для запуска программы с параметрами:
    .\Total_Commander_XP\TOTALCMD.EXE /I=”.\Profiles\Prof\main.ini” /F=”.\Profiles\Prof\ftp.ini”
    Выдается сообщение об ошибке:
    Windows не удалось найти ‘.\Total_Commander_XP\TOTALCMD.EXE /I=”.\Profiles\Prof\main.ini” /F=”.\Profiles\Prof\ftp.ini”‘. проверьте, что имя было введено правильно, и повторите попытку. Чтобы выполнить поиск файла, нажмите кнопку “пуск”, а затем выберите команду “Найти”.
    подскажите, пожалуйста. Можно ли обойти это?

    • Можно попробовать указать два отдельных параметра, каждый в своих кавычках:
      “запускаемая программа” “все ее параметры”. На простеньком примере у меня сработало. Ну и кавычки… Лучше бы их внутри параметра не было.

      • роман пишет:

        попробовал этот же ярлык, не получилось. попробовал и другой, где параметры без кавычек, тоже не прокатило. Жаль, идея то хорошая. Вы еще про скрипты упоминали. Не направите ли в нужную сторону?

        • Может эта зверюга пытается сама слеши как-то обработать?

          Кстати, обнаружил, что если файл лежит в той же папке, что и ярлык, то писать надо без “.\”.

          Насчет скриптов. В Windows встроен Windows Script Host (WSH) – движок, выполняющий скрипты (они же “сценарии”) на языках Visual Basic Script (vbs) и JScript (js, это майкрософтовский вариант javascript). по этим словам вы найдете достаточно информации, в том числе по русски.

          Ну и старый добрый bat. Читать для начала здесь http://doitq.ru/2006/03/28/zhdu-ukazaniy-mon-zheneral/
          п, насчет нелюбимых мною лишных окон: http://doitq.ru/2006/06/06/nevidimyiy-bat/

  3. [...] В продолжение темы о ярлыках. Если в свойствах ярлыка, в поле «Объект» указать строку %windir%explorer.exe “.”, а поле «рабочая папка» оставить пустым, то его запуск будет открывать в проводнике ту папку, в которой этот ярлык лежит. Его можно копировать в разные папки, не изменяя. [...]

    • fy пишет:

      попробуйте положить в корень какой-нибудь папки ярлык на другую папку, обзовите его “target”, создайте там же файлик “Desktop.ini” с следующим содержимым:
      [.ShellClassInfo]
      CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D}
      Flags=2
      и посмотрите в проводнике, что получится.
      примечание: чтобы убрать эффект, воспользуйтесь каким-нибудь сторонним файловым менеджером, достаточно переименования ярлыка из “target” в любое другое имя.
      К сожалению, сочетание этого и вышеописанного методов не дают желаемого эффекта.

      • павел рындин пишет:

        Это аналог junction в NTFS?
        Если не ошибаюсь, один из этих файлов (или оба) должен иметь атрибуты «скрытый» и «системный». Не писал о такой штуке, так как и раньше она глючила, а с каким-то из обновлений вообще перестала работать.

  4. VolanDoc пишет:

    Спасибо – помогло, однако исчезает иконка и ярлык становится обычным. Можно как-то подправить?

    • павел рындин пишет:

      В свойствах ярлыка есть кнопка «сменить значок». Там можно открыть как файл ico, так и файл приложения, содержащий иконки, и выбрать нужную. То есть для документа Word, например, иконки лежат в winword.exe.

  5. ld пишет:

    Скажите, пожалуйста, это касается предыдущего коммента — как прописать относительный путь к файлу с иконкой??

    • павел рындин пишет:

      Черт возьми… пожалуй, в рамках диалога выбора иконки никак. Не подумал сразу.
      Сейчас смотреть нет времени, но вы можете покопаться вот в каком направлении: создайте «ярлык интернета» (не обычный!) и откройте текстовым редактором. Это обычный ini-файл. Туда, вместо URL можно прописать путь к программе. п есть некоторая вероятность, что хитрой комбинацией слешей можно сделать путь относительным, и так же поступить с путем к иконке. Напоминаю, что обычный ярлык — файл бинарный, и так просто его не поредактируешь.

  6. andyceo пишет:

    Автору респект! Я попробовал этот метод, всё получилось. Да, к сожалению иконки к ярлыкам пропадают, и их приходится настраивать вручную. Что хорошо – видимо, иконки сохраняются в самом файле ярлыка, т.к. после удаления файла-источника иконки, иконка на ярлыке всё равно остаётся.

    Ещё раз, спасибо! очень нужный метод! Жаль только, что работает только под виндой, под линухом не запуститься…

  7. ppbd пишет:

    Автору респект.

  8. Alex пишет:

    Все это методы через Заднее место вобщето есть великий cmd.exe,
    пример:
    %windir%\system32\cmd.exe /C start /B /D .\Client .\Client\Client.exe
    пз папки Client запустить Client.exe

  9. m-a-n1 пишет:

    пример иконки у папки (относительный путь) для Windows XP и Vista

    Создайте файл desktop.ini
    и пропишите в нём

    [.ShellClassInfo]
    IconResource=..\MacSoft\mac_os2.ico,0
    IconFile=..\MacSoft\mac_os2.ico
    IconIndex=0

    где

    ..\ (любая буква диска)
    MacSoft\ (папка у которой меняется иконка
    mac_os2.ico,0 (сама иконка)

  10. павел рындин пишет:

    То папка, а разговор был о ярлыке…

  11. Castor пишет:

    Во-первых, спасибо!
    Уже давно пользуюсь Вашими относительными ярлыками и даже с параметрами и даже научился делать иконку из системного набора, написав в “Смене значка”
    %SystemRoot%\system32\SHELL32.dll

    Но вдруг беда:
    все мои относительные ярлыки не работают под Вистой!
    Что делать?
    Что Висте может не понравиться в строчке типа:
    %windir%\system32\RunDll32.exe shell32.dll,ShellExec_RunDLL “.\path_to_exe\my.exe” “.\path_to_parameter_file\my_parameter_file”

  12. павел рындин пишет:

    Вероятно, что-то в таком способе вызова DLL изменилось. Точно сказать не могу.

  13. рома пишет:

    не работает. не понятно что как нужно сделать

  14. naxaH пишет:

    %windir%\system32\cmd.exe /C start \directuse\total_commander\Totalcmd.exe + рабочая папка %cd% работает под windows 7 проверено. Ед тока хз че там с кавычками мутить чтобы пробел читался при выполнении команды.

    Второе решение:
    %windir%\system32\cmd.exe /c cd “\DirectUse\Total_Commander” & “totalcmd.exe” рабочая папка пусто. ТОже работает под windows 7

    Enjoy made faka!

  15. naxaH пишет:

    %comspec% /c cd /d “\DirectUse\Total_Commander”&& start “” totalcmd.exe

    Запуск + убирается cmd’шное окно

    • Игорь пишет:

      Здравствуйте! Объясните, пожалуйста, где в этой строке что
      %comspec% /c cd /d “\DirectUse\Total_Commander”&& start “” totalcmd.exe
      Уже по разному пробовал, скорее всего чего то не понимаю.

      Предположим, где-то есть папка “Папка1″, в ней есть файл “файл1.html”, делаем на него ярлык и кладем рядом с папкой “Папка1″, как я понял, чтобы ярлык заработал, строка в свойствах должна быть вот такой:
      %comspec% /c cd /d “\Папка1”&& start “” Файл1.html
      и рабочую папку оставляем пустой.
      Но вылазит на секундку окно с надписью “Системе не удалось найти указанный путь”(windows 7 64x).

      Подредактируйте, пожалуйста, чтобы работало=) буду очень благодарен!Заранее, большое спасибо!

  16. JohnnySuperb пишет:

    Который раз уже захожу на этот сайт и каждый раз помогает!!!

  17. DarkKnight пишет:

    Проблему с пробелами можно решить при помощи использования имен в DOS-виде. Например открыть Far и нажать Ctrl+N, а далее путь указывать в соответствии с новыми именами.
    Когда я писал, то получилось примерно такое:
    %windir%\system32\cmd.exe /C start ..\PROGRAMS\!!!POR~1\MYHOME~1.3PO\MYHOME~1.EXE , а исходний путь был:
    ..\Programs\!!! Portable Apps\MyHomeLib 2.1.3 Portable\MyhomeLib.exe

  18. Aeliot пишет:

    прописал следующее
    %windir%\system32\cmd.exe /c cd /d “\eclipse-php”&& start “eclipse-php.exe”
    но не работает. выскакивает чёрное окно на мгновение и всё на этом. программа не запускается.
    win-7 (64)

Оставить комментарий