Як зробити ярлик від CMD?


76

Як я можу створити файл ярлика ( .lnk) до іншого файлу чи виконуваного файлу за допомогою утиліт командного рядка?


1
Здається, немає жодного прямого способу зробити це. Деякі люди мають написані інструменти, які дозволяють вам це робити; ось один із них . Пошук Google для "командний рядок створення ярлика" відображає деякі інші. (Я не пробував жодної з них.)
Кіт Томпсон

@iglvzx - Я не впевнений, що редагування, яке ви зробили, є правильним. Я не думаю, що Шантану потрібен пакетний сценарій - це може бути будь-який спосіб створення * .lnk до іншого * .exe-файлу.
alfasin

@alfasin я додав (.ink file), оскільки була певна плутанина. Я переглянув питання, щоб відобразити коментар Шантану. Хоча ви надаєте спосіб зробити "ярлики", він не відповідає на це конкретне запитання.
iglvzx

1
Використовуйте наступне: powershell "$ s = (New-Object -COM WScript.Shell) .CreateShortcut ('% userprofile% \ Desktop \ shortcut.lnk'); $ s.TargetPath = 'C: \ Windows \'; $ s .Save () "Очевидно, замініть" '% userprofile% \ Desktop \ shortcut.lnk "та" C: \ Windows \ "своїм шлях ярлика та цільовим шляхом відповідно.
каулінатор

@cowlinator Ваша пропозиція не працює.
Плоні

Відповіді:


53

На цьому сайті є дуже корисна інформація: http://ss64.com/nt/shortcut.html

Здається, що shortcut.exeв деякому наборі ресурсів є деякі, яких у мене немає.
Як згадують багато інших сайтів, немає вбудованого способу зробити це з пакетного файлу.

Але це можна зробити за допомогою сценарію VB:

Необов’язкові розділи в VBscript нижче коментуються:

Set oWS = WScript.CreateObject("WScript.Shell")
sLinkFile = "C:\MyShortcut.LNK"
Set oLink = oWS.CreateShortcut(sLinkFile)
    oLink.TargetPath = "C:\Program Files\MyApp\MyProgram.EXE"
 '  oLink.Arguments = ""
 '  oLink.Description = "MyProgram"   
 '  oLink.HotKey = "ALT+CTRL+F"
 '  oLink.IconLocation = "C:\Program Files\MyApp\MyProgram.EXE, 2"
 '  oLink.WindowStyle = "1"   
 '  oLink.WorkingDirectory = "C:\Program Files\MyApp"
oLink.Save

Отже, якщо ви дійсно повинні це зробити, то ви можете змусити ваш пакетний файл написати сценарій VB на диск, викликати його і потім знову його видалити. Наприклад, так:

@echo off
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs
echo sLinkFile = "%HOMEDRIVE%%HOMEPATH%\Desktop\Hello.lnk" >> CreateShortcut.vbs
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs
echo oLink.TargetPath = "C:\Windows\notepad.exe" >> CreateShortcut.vbs
echo oLink.Save >> CreateShortcut.vbs
cscript CreateShortcut.vbs
del CreateShortcut.vbs

Запуск вищевказаного сценарію призводить до появи нового ярлика на моєму робочому столі:
Результат ярлика

Ось більш повний фрагмент анонімного дописувача (оновлений з незначним виправленням):

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET LinkName=Hello
SET Esc_LinkDest=%%HOMEDRIVE%%%%HOMEPATH%%\Desktop\!LinkName!.lnk
SET Esc_LinkTarget=%%SYSTEMROOT%%\notepad.exe
SET cSctVBS=CreateShortcut.vbs
SET LOG=".\%~N0_runtime.log"
((
  echo Set oWS = WScript.CreateObject^("WScript.Shell"^) 
  echo sLinkFile = oWS.ExpandEnvironmentStrings^("!Esc_LinkDest!"^)
  echo Set oLink = oWS.CreateShortcut^(sLinkFile^) 
  echo oLink.TargetPath = oWS.ExpandEnvironmentStrings^("!Esc_LinkTarget!"^)
  echo oLink.Save
)1>!cSctVBS!
cscript //nologo .\!cSctVBS!
DEL !cSctVBS! /f /q
)1>>!LOG! 2>>&1

1
Пов’язано: MSDN, Shell Links
iglvzx

Це чудово підходить для ярлика до файлу. Однак у мене виникає дивна проблема використання її для ярлика до папки, коли моя змінна Esc_LinkTarget містить змінну середовища, що намагається отримати її батьківську папку. (Щось на зразок% CD% \ .. не працює, але% CD% працює). Тип цільового ярлика стає "Файл" замість "Папки"
EDM

1
@Edmund Цікава проблема. Я не встигаю розглянути це, але я вважаю, що косою косою рисою можна змінити значення.
Der Hochstapler

Примітка: якщо ви користуєтесь, SET Esc_LinkTarget=%0вам доведеться видалити "зecho oLink.TargetPath = oWS.ExpandEnvironmentStrings^(!Esc_LinkTarget!^)
Чорний

Замість створення vbscript для кожного виконання було б набагато краще використовувати Wscript.Argumentsаргументи командного рядка ... lol
Sancarn

22

Ось подібне рішення за допомогою повороту (я знаю, ви, ймовірно, можете переписати весь пакетний файл в PS, але якщо ви просто хочете, щоб отримати його виконано ™ ...)

set TARGET='D:\Temp'
set SHORTCUT='C:\Temp\test.lnk'
set PWS=powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile

%PWS% -Command "$ws = New-Object -ComObject WScript.Shell; $s = $ws.CreateShortcut(%SHORTCUT%); $S.TargetPath = %TARGET%; $S.Save()"

Можливо, вам доведеться вказати шлях до файлу PS у вашому файлі, але він повинен працювати. Є кілька додаткових атрибутів, якими ви також можете обробляти цей об’єкт:

Name             MemberType Definition                             
----             ---------- ----------                             
Load             Method     void Load (string)                     
Save             Method     void Save ()                           
Arguments        Property   string Arguments () {get} {set}        
Description      Property   string Description () {get} {set}      
FullName         Property   string FullName () {get}               
Hotkey           Property   string Hotkey () {get} {set}           
IconLocation     Property   string IconLocation () {get} {set}     
RelativePath     Property   string RelativePath () {set}           
TargetPath       Property   string TargetPath () {get} {set}       
WindowStyle      Property   int WindowStyle () {get} {set}         
WorkingDirectory Property   string WorkingDirectory () {get} {set} 

Trix : Якщо ви вважаєте, що у вас є кращий спосіб зробити це , просто опублікуйте це як нову відповідь (посилаючись на цю, якщо це доречно).
Скотт


10

Як щодо використання команди mklink? C: \ Windows \ System32> mklink Створює символічне посилання.

MKLINK [[/ D] | [/ Н] | [/ J]] Ціль посилання

    /D      Creates a directory symbolic link.  Default is a file
            symbolic link.
    /H      Creates a hard link instead of a symbolic link.
    /J      Creates a Directory Junction.
    Link    specifies the new symbolic link name.
    Target  specifies the path (relative or absolute) that the new link
            refers to.

10
Хороша ідея, але, схоже, посилання поводяться трохи інакше, ніж ярлики. Якщо я створюю ярлик до рішення Visual Studio, він відкриє всі відносно промальовані проекти правильно. Однак якщо я відкрию те саме рішення через симпосилання, робочий каталог - це той шлях, в якому знаходиться посилання, а не шлях, на який він посилається.
Вальтер Стабош

7

Після всіх обговорень, які ми тут мали, це моє запропоноване рішення: скачайте: http://optimumx.com/download/Shortcut.zip витягніть його на робочий стіл (наприклад). Тепер, припустимо, ви хочете створити ярлик для файлу під назвою scrum.pdf (також на робочому столі):
1. відкрийте CMD і перейдіть до папки робочого столу
.Shortcut.exe /f:"%USERPROFILE%\Desktop\sc.lnk" /a:c /t:%USERPROFILE%\Desktop\scrum.pdf

він створить ярлик sc.lnk на робочому столі, який вказуватиме на оригінальний файл (scrum.pdf)


Це не ярлик; це лише пакетний файл, який викликає вказану програму.
Кіт Томпсон

1
ярлик - це те, що ви запускаєте з Windows, оскільки він використав CMD у заголовку та поставив тег "командного рядка". Я припускав, що він хоче запустити його з CMD. Пакетний файл є еквівалентом "ярлика" Windows при запуску в CMD (dos like) env.
alfasin

2
Оскільки він розмістив "ярлик (.lnk файл)" в тілі питання, я припустив, що він хоче створити фактичний ярлик.
Кіт Томпсон

1
вибачте за ясність, я хотів мати на своєму робочому столі значок, який я зробив у cmd, який би був ярликом до файлу exe
Shantanu

тепер, коли я нарешті зрозумів (повільний мислитель - що ти можеш зробити ...) я змінив свою відповідь. сподіваюся, що це допоможе!
alfasin

0

Ця безкоштовна програма має необхідну функціональність http://www.nirsoft.net/utils/nircmd2.html : (зразок із зазначеної веб-сторінки) "Create a shortcut to Windows calculator under Start Menu->Programs->Calculators nircmd.exe shortcut "f:\winnt\system32\calc.exe" "~$folder.programs$\Calculators" "Windows Calculator"

Мій власний зразок для спробу: nircmd.exe ярлик "c: \ windows \ system32 \ calc.exe" "~ $ folder.desktop $" "Калькулятор Windows"


0

Я знаю, що ця тема стара, але я хотів запропонувати просте рішення, яке працювало для мене.

Я спершу скопіював .ico файл на свій C: диск. Потім я створив ярлик на своєму робочому столі і встановив піктограму у файл ico на своєму C: диску. Потім я скопіював і .ico, і ярлик у мережеву спільну доступ, до якої мої користувачі мають доступ. Якось там я написав наступний пакетний файл, щоб скопіювати ico і .url на робочий стіл користувачів Windows. Це створює ярлик на всіх робочих столах користувачів і зберігає файл значків, який я встановив під час створення ярлика. Я сподіваюся, що це комусь допоможе.

@echo off
Copy "\\sharename\folder\icon.ico" "C:\"
pause
copy "\\sharename\folder\shortcut.url" "C:\Users\All Users\Desktop"
pause

Якщо це такий підхід, краще створити фактичний ярлик (.lnk), який вбудовує піктограму в нього. Цей ярлик потім можна скопіювати скрізь.
LPChip
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.