Сделать запуск Windows по ярлыку относительно того, где находится папка?
У меня есть игра, которая использует эту файловую структуру:
GAME FOLDER
->data
->data->run.bat
Я хочу поставить ярлык на run.bat
в GAME FOLDER, но если я переместу его или кто-то другой установит его, он не будет работать, потому что цель неверна. Есть ли способ сделать цель и "начать" относительно FAME FAMEER?
17 ответов
Шаг 1:
Щелкните правой кнопкой мыши на папке /bat/ и выберите " Создать ярлык".
На Windows 7 вы получите bat - Shortcut
в текущем каталоге.
На Windows XP вы получите Shortcut to bat
,
Шаг 2:
Щелкните правой кнопкой мыши по ярлыку, который вы только что создали, и выберите Свойства.
Измените цель (на вкладке " Ярлык " в Windows 7) на следующее:
%windir%\system32\cmd.exe /c start "" "%CD%\bat\bat\run.bat"
Нажмите ОК. В Windows 7 значок ярлыка изменится на значок cmd.exe. Это, вероятно, приемлемо в случае ярлыка для.bat, но если вы хотите изменить значок, снова откройте свойства ярлыка и нажмите " Изменить значок..." (снова на вкладке " Ярлык " в Windows 7). На данный момент вы можете просмотреть... для значка или вызвать список системных значков по умолчанию, введя
%SystemRoot%\system32\SHELL32.dll
слева от Browse...
Кнопка и нажав Enter. Это работает в Windows 7 и Windows XP, но значки отличаются из-за обновлений стиля (но узнаваемо похожи). В зависимости от версии Windows, где находится ярлык, значок иногда будет меняться соответственно.
Больше информации:
См. Использование команды "start" с параметрами, передаваемыми запущенной программе, чтобы лучше понять пустые двойные кавычки в начале первой целевой команды.
По словам Microsoft, если вы оставите 'Start In'
поле пусто, скрипт будет работать в текущем рабочем каталоге. Я пробовал это в Windows 7, и, кажется, работает нормально.
Источник: http://support.microsoft.com/kb/283065
Попробуйте использовать Relative (приложение командной строки Windows).
По сути, ярлык может иметь относительную ссылку, но Windows не дает возможности его создать.
Если вы можете установить системную переменную (что-то вроде%MyGameFolder%), то вы можете использовать ее в своих путях и ярлыках, и Windows заполнит остальную часть пути для вас (то есть %MyGameFolder%\data\MyGame.exe
).
Вот небольшой учебник. Вы можете установить это значение через командный файл или, вероятно, установить его программно, если вы поделитесь, как вы планируете создать ярлык.
Вы можете сделать относительный ярлык вручную, изменив путь к файлу. Сначала в обычном контекстном меню вы создаете новый ярлык Windows для вашего файла и в свойствах -> местоположение вашего файла:
%windir%\explorer.exe "..\data\run.bat"
Мне нравится решение leoj3n. Его также можно использовать для установки относительного каталога "start in", что мне и нужно, используя параметр start/ s. Без / c или /k в качестве аргумента для cmd последующая команда запуска не запускается. /c закроет оболочку сразу после запуска команды и /k будет держать ее открытой (даже после выполнения команды). Так что, если то, что вы используете, выплескивается на стандарт и вам нужно это увидеть, используйте /k.
К сожалению, согласно спецификации файла lnk, значок не сохраняется в ярлыке, а, скорее, "кодируется с использованием переменных среды, что позволяет находить значок на машинах, где местоположения меняются, но выражаются с помощью переменных среды". Таким образом, вполне вероятно, что если пути меняются, и вы пытаетесь извлечь значок из исполняемого файла, на который вы указываете, он не будет правильно переноситься.
После создания ярлыка в свойствах установите следующее:
Цель:
%comspec% /k "data\run.bat"
- Брось
/k
если вы не хотите, чтобы подсказка оставалась открытой после ее запуска.Начинать:
%cd%\data
Я попробовал%~dp0 в поле Пуск в, и он отлично работает в Windows 10 x64
Прочитав несколько ответов, я решил сделать это с помощью простого решения: вместо ярлыка я создал.bat только с одной строкой для вызова основного.bat, и он работает так, как я хотел.
Я не уверен, прав ли я, или я что-то упустил, но на данный момент (2016-07-11, запущенный Win7 Enterprise SP1) файл LNK адаптируется при перемещении или даже изменении буквы диска после того, как он беги на новом месте! Я создал новый ярлык на USB-накопителе и попытался переместить ярлык и его цель таким образом, чтобы относительное положение не изменилось, а затем изменил букву диска. Ярлык работал в обоих случаях, и поле назначения было адаптировано после того, как я дважды щелкнул по нему.
Похоже, Microsoft решила эту проблему в одном из последних обновлений.
Пожалуйста, кто-нибудь подтвердит это.
Ссылка с относительным путем может быть создана с помощью команды mklink в командной строке Windows.
mklink /d \MyDocs \Users\User1\Documents
Это может быть лучшим способом создания ссылки, потому что, по-видимому, поведение ярлыков может отличаться, возможно, в зависимости от способа их создания (пользовательский интерфейс против команды mklink). Я наблюдал какое-то странное поведение с тем, как ведут себя ярлыки, когда я меняю корневую папку.
- В Windows 7 есть странное поведение, которое я тестировал. Иногда ссылка все еще работает только тогда, когда корневая папка цели изменяется (свойства ярлыка автоматически обновляются, чтобы отразить измененный путь!). Поле "начать с" также обновляется автоматически, если оно там было.
- Я также заметил, что одна ссылка не работает при первом изменении корневого пути (свойства показывают старый), но она работает после 2-го и каждый раз после этого. Свойства ссылки обновляются в результате первого запуска!
- Я также заметил по крайней мере для двух ссылок, он не обновляет путь и больше не работает.
- От свойств ссылки, нет разницы в формате каких-либо полей, но поведение отличается.
Вы можете попросить командный файл изменить текущий рабочий каталог (CD).
Сделать символическую ссылку относительного пути. В командной строке
cmd
(с правами администратора):
mklink /D SYMLINK_NAME RELATIVE_TARGET_PATH
Самое простое решение:> Переменные среды удобны для маленьких тварей.
Если другой человек должен установить / распаковать все, что угодно на его системном диске (обычно c:).
Для демонстрации назовите наше приложение "test.exe" (это может быть любой исполняемый файл / файл не обязательно должен быть exe), и оно должно быть установлено / распаковано в папку MYCOMPANY\MYAPP\
Затем просто создайте ярлык, который использует%SystemDrive%\MYCOMPANY\MYAPP\test.exe в качестве цели и% SystemDrive% \ MYCOMPANY\MYAPP\ в качестве запуска.
Так что теперь вы хотели бы развернуть его. Используя приложение типа "WinRAR".
Простой способ - использовать самораспаковывающийся zip-файл, аккуратно упакованный как ".exe". Я бы использовал один для своего ярлыка, а другой - для приложения. Есть способы сделать один самораспаковывающийся zip-файл, который извлекает разные файлы в разные каталоги, но я еще не играл с ним.
Другой способ - создать собственный экстракт для ярлыка, внедрить его в собственный текст для приложения, а затем применить сценарий запуска один раз, когда вы знаете, где будет находиться файл. и т.п.
Если вы хотите разрешить установщику использовать пользовательские каталоги установки / распаковки, лучше взгляните на NSIS - систему установки с поддержкой сценариев.
Тренировка это весело, надеюсь, моя информация помогла.
Метод, предложенный leoj, не позволяет передавать параметры с пробелами. Нам это:
cmd.exe /v /c %CD:~0,2%"%CD:~2%\bat\bat\run.bat" "Par1-1 Par1-2" Par2
Это будет похоже на двойные кавычки, написанные как в пути
C:"\Program Files\anyProgram.exe" "Par1-1 Par1-2" Par2
Небольшое улучшение решения leoj3n (чтобы окно консоли исчезло): вместо %windir%\system32\cmd.exe /c start "" "%CD%\bat\bat\run.bat"
к полю Target: вашего ярлыка Windows, вы также можете попробовать добавить только следующее: %windir%\system32\cmd.exe /c "%CD%\bat\bat\run.bat"
И затем также добавление start
перед вашими командами в run.bat
, Это заставит окно консоли исчезнуть, но все остальное остается прежним.
Похоже, нет решения для этого до сих пор.
в программном обеспечении ACL для аудита мы можем использовать "..", чтобы указать начальный каталог. Я надеюсь, что Windows может позволить что-то подобное.
Например: оригинальный путь: c \ windows \ games \u2\strife.exe, если ярлык вставлен в папку "игры", а друзья любят копировать...
путь должен (может) редактироваться как ".. \u2\strife.exe"