Использование относительных путей для ярлыков Windows

49

У меня есть схема папок, как (сильно упрощенная версия):

New Files
 >Tools
 >Scripts
Tested Files
 >Tools
 >Scripts

... и я хотел бы иметь ярлык в каждой папке от дочерних папок "Новые файлы" до дочерней папки "Проверенные файлы". Но эта папка может время от времени перемещаться, что приведет к поломке указанных ярлыков.

Есть ли способ сделать относительный ярлык для каждой папки? Я помню, как делал это в HTML, где вы могли задать путь, что-то вроде того, .../Filesчтобы вернуться к родителю, а затем в новую папку, но я не уверен, что это что-то поддерживает в ярлыках Windows?

PS: случай аналогичных относительных ярлыков, когда целью является файл, рассматривается в https://stackoverflow.com/questions/1169556/making-a-windows-shortcut-start-relative-to-where-the- папка-есть . В данном случае целью является папка.

Гэри Моррис
источник
1
Вы пробовали ../Filesс двумя точками? У меня не работает Windows, но я думаю, что она может работать.
Брайан З.
1
Это первое, что я попробовал, спасибо. :(
Гэри Моррис,
stackoverflow.com/q/1169556/2707864
sancho.s Восстановите Монику
@ sancho.s - AFAIK, ответы там работают только для выполнения .bat файлов. Здесь нужен способ ссылки на папку.
ToolmakerSteve
@ToolmakerSteve - я думаю, что вы проверяли / читали "ответы там" только поверхностно. Одним из них ( stackoverflow.com/a/1751350/2707864 ) является принятое здесь решение, которое является ок. На 4 года старше. Я не пробовал это. Другой ( stackoverflow.com/a/29261618/2707864 ) является второй половиной принятого решения здесь. Вы даже прокомментировали это. Я попробовал это, и это работает. Не обязательно быть внимательным, чтобы оставить комментарий, но нужно стараться не вводить читателей в заблуждение.
sancho.s Восстановить Монику

Ответы:

50

Вы можете использовать эту утилиту: Относительный .

По сути, он создает ярлык для «explorer.exe» с параметром вашего относительного пути с помощью щелчка правой кнопкой мыши (так же, как вы создаете обычный ярлык).

Конечно, вы можете сделать это вручную.
В вашем примере вы бы создали ярлык в «Новые файлы \ Инструменты» для

%windir%\explorer.exe "..\..\Tested Files\Tools"

Для этого вы можете использовать обычное контекстное меню «Создать / Создать ярлык» Windows и ввести указанную выше команду в поле «Введите местоположение элемента».

Rik
источник
Я читал об этом во время моего предыдущего исследования, но я надеялся на собственное решение в Explorer. Это будет мой резервный план, ура.
Гэри Моррис,
Кстати, этот относительный путь останется неизменным и между системами? Или мне понадобится установить Relative, если я перемещу папки / содержимое между разными системами?
Гэри Моррис
3
«Относительный» делает ярлык только с использованием стандартного «% windir% \ explorer.exe», поэтому вам не нужен Относительный в другой системе. Это было бы то же самое, что печатать %windir%\explorer.exeперед относительным путем при создании стандартного ярлыка. Так что, если вы сделаете это вручную, вам вообще не понадобится Relative. (Вам просто нужно запомнить команду до вашего относительного пути)
Рик
Ах, извините, я неправильно понял эту часть вашего первого ответа, мой плохой! Спасибо!
Гэри Моррис
2
Ручное решение здесь не работает для меня из коробки. Кроме того, я должен изменить «Start In» с %windir%пустым.
notan3xit
30

Одним из возможных решений является использование однострочного пакетного файла вместо ярлыка, чтобы открыть все, что вы хотели открыть. Пакетный файл позволит вам использовать относительные пути внутри себя и будет иметь рабочий каталог, в котором находится пакетный файл.


Другой вариант - cmd.exeвместо этого запустить ярлык с того, что вы запускаете, а затем передать в качестве аргумента все, что вы запускаете.cmd.exe

введите описание изображения здесь

%COMSPEC%является переменной окружения точки к командной строке по умолчанию .

/C заставляет консоль закрываться после выполнения команды.

Скотт Чемберлен
источник
Большое спасибо! Это сработало для меня. Я часами пытался заставить свой ярлык выполнить скрипт power-shell в той же директории.
Шервин
Полезно для другой ситуации, однако вопрос не в том, чтобы открыть какой-либо файл; речь идет о возможности перехода к указанной папке в проводнике Windows. Есть ли способ адаптировать этот ответ для этого?
ToolmakerSteve
7

Этот трюк работает:

% COMSPEC% / C запускает "ваше exe-имя без пути"

пример

% COMSPEC% / C запускает winmine.exe

Алексис ПЕРРОТТЕЙ
источник
2
Пожалуйста, внимательно прочитайте вопрос. Ваш ответ не отвечает на оригинальный вопрос.
ДэвидПостилл
1
Для Win10 1607 это решение отлично отвечает на вопрос ОП, цель: %COMSPEC% /C "start GoogleChromePortable.exe -enableextensions -incognito"начать с: [оставить пустым]
semtex41
@ semtex41 А? Я стараюсь , что, и в результате диалоговое окно ошибки говоря «Windows не может найти„GoogleChromePortable“Какое это имеет отношение к цели OP о навигации Проводника Windows в указанную папку.?
ToolmakerSteve
@ToolmakerSteve хорошо, заголовок «Использование относительных путей для ярлыков Windows», и я способствовал ранее предоставленному ответу. И цель OP на самом деле сделать пути динамическими, а не статичными. Так как мой ответ - то, как я создал ярлык, который выполняется по нестатическому пути, я считаю, что мой ответ подходит.
semtex41
@ semtex41- Заявленная цель OP - ".. ярлык .. к дочерней папке" Tested Files "". Если вы не объясняете , как иметь этот ответ осуществить это, то просьба уточнить , что вы были добавление к ответу. Похоже, вы только что дали другой пример того, как выполнить файл .exe. Но ответ уже показал такой пример. Поэтому, пожалуйста, переформулируйте точку, которую вы указывали?
ToolmakerSteve
6

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

введите описание изображения здесь

Я могу передать аргументы моему сценарию летучей мыши и т. Д., Это круто. Не забудьте поставить /cаргумент послеcmd.exe

Хрвое Гольчич
источник
2

Вы можете использовать mklink . Это позволяет создавать символические ссылки, жесткие ссылки и ссылки в каталогах.

 mklink /d Tools "..\Tested Files\Tools"  (elevated command prompt)

Если нет повышенного доступа, вы можете использовать / J

 mklink /j Tools "..\Tested Files\Tools"

Для перемещения по всей структуре вы должны использовать команду xcopy . Например, если вся структура находится под контейнером :

container
   New Files
      <SYMLINKD> Scripts [..\Tested Files\Scripts]
      <SYMLINKD> Tools  [ ..\Tested Files\Tools]
   Tested Files    
      Scripts
      Tools

ввод команды

 copy /b /e container container2

создаст следующую структуру:

container2
   New Files
      <SYMLINKD> Scripts [..\Tested Files\Scripts]
      <SYMLINKD> Tools  [ ..\Tested Files\Tools]
   Tested Files    
      Scripts
      Tools

Ключ / b будет копировать символические ссылки, а не конвертировать их в папки.

Krauss
источник
Но будет ли эта ссылка правильной, если набор папок будет перемещен в другое место?
ToolmakerSteve
Для этого требуются привилегии, которых у меня нет, хотя похоже, что это сработает ... Не могли бы вы опубликовать изображение полученных свойств ярлыка после его создания?
sancho.s Восстановить Монику
Ссылки действительно верны. Это можно подтвердить командой "dir". Проблема заключается в том, что действия «копировать-вставить», «переместить» и «скопировать» в диспетчере файлов разрушат структуру. Я изменил ответ, чтобы включить обходной путь.
Краусс
1

Ярлык может записать его местоположение в переменной и вызвать команду, используя переменную. Например, создайте ярлык «Дедушка» с целью:

%windir%\system32\cmd.exe /c set HERE="%CD%" && "C:\Here.bat"

Создайте командный файл «C: \ Here.bat» в одну строку:

@%windir%\explorer.exe /n,/select, %HERE%

Теперь, независимо от того, в какой папке находится Grandparent, при нажатии на нее открывается родительская папка родительской папки. Он даже работает с дедушкой в ​​корневом каталоге.

Ваш пакетный файл мог использовать% HERE% при запуске чего-то другого, кроме explorer.exe. Или вместо Here.bat после && в целевом ярлыке вы можете вызвать программу, которая использует% HERE%.

В моей системе дедушка работает с & или &&.

MUDr
источник
1
&&выполняет следующий вызов только в том случае, если предыдущий вызов не вернул ошибку, хотя &это не имеет значения. В этом случае не должно быть никакой разницы.
leewz
1

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

Смотрите также https://stackoverflow.com/a/17951772/40961

Дэвид д С е Фрейтас
источник
Как это помогает цели OP по перемещению Проводника Windows в указанную папку?
ToolmakerSteve
Если у вас возникла проблема, то решение имеет смысл ... как ваш комментарий помогает при каждом ответе?
Дэвид д'Э Фрейтас
0

Вы можете создать переменную среды, которая содержит (относительный) путь к целевой папке или папке над ней в структуре файловой системы.

Пример:

  • Переменная среды:

    % Dropbox% = "C: \ Users \ Пользователь 1 \ Dropbox"

  • Ярлык Цель:

    "% Dropbox% \ Install \ Utilities \ file.exe"

Вы можете использовать команду DOS SETX для создания переменных окружения.

gmoises
источник