Windows создать ярлык из командной строки


Windows, Windows 10, Windows 7, Windows 8, Windows Server, Windows Vista, Windows XP

Создаем ярлык через командную строку

  • 01.05.2021
  • 8 658
  • 4
  • 29.11.2022
  • 15
  • 15
  • 0

Создаем ярлык через командную строку

  • Содержание статьи
    • Вступление
    • Вызываем код VBScript из командной строки
    • Используем отдельный файл VBScript для создания ярлыков
    • Комментарии к статье ( 4 шт )
    • Добавить комментарий

Вступление

При создании bat файлов для автоматизации различных действий, мне не раз приходила мысль о необходимости создания ярлыков через командную строку. К сожалению, обычными средствами командной строки это не сделать. В результате, пришлось искать обходной путь, которым оказался встроенный в Windows язык сценариев VBSscript.

Вызываем код VBScript из командной строки

Один из вариантов использования VBScript заключается в том, что через команду echo из командной строки будет создан vbs файл, который затем будет выполнен и удален. В примере ниже, мы создадим ярлык для Блокнота:

echo Set objShell = CreateObject("WScript.Shell") > %TEMP%\CreateShortcut.vbs
echo Set objLink = objShell.CreateShortcut("%USERPROFILE%\Desktop\Блокнот.lnk") >> %TEMP%\CreateShortcut.vbs
echo objLink.Description = "Запуск Блокнота" >> %TEMP%\CreateShortcut.vbs
echo objLink.TargetPath = "C:\Windows\System32\Notepad.exe" >> %TEMP%\CreateShortcut.vbs
echo objLink.Save >> %TEMP%\CreateShortcut.vbs
cscript %TEMP%\CreateShortcut.vbs
del %TEMP%\CreateShortcut.vbs

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

Другой вариант создания ярлыка через командную строку — использования отдельного файла скрипта, написанного на VBScript. Для этого, нужно создать файл формата vbs следующего содержания, и сохранить его в каком-нибудь удобном для себя месте:

Set objShell = CreateObject("WScript.Shell")

' Проверяем, что получили какие-то параметры
If WScript.Arguments.Count > 0 Then
	Set colArgs = WScript.Arguments.Named
	' Описание ярлыка
	strDescription = colArgs.Item("description")
	' Путь для сохранения создаваемого ярлыка
	strDestination = colArgs.Item("destination")
	' Пользовательский значок создаваемого ярлыка
	strIcon = colArgs.Item("icon")
	' Имя создаваемого ярлыка
	strName = colArgs.Item("name")
	' Путь к объекту, на который ссылается ярлык
	strSource = colArgs.Item("source")

	Set objLink = objShell.CreateShortcut(strDestination & "\" & strName & ".lnk")
	' Устанавливаем описание ярлыка, только если задан аргумент description
	If 0 < Len(strDescription) Then
		objLink.Description = strDescription
	End If
	' Устанавливаем пользовательский значок, только если задан аргумент icon
	If 0 < Len(strIcon) Then
		objLink.IconLocation = strIcon
	End If
	objLink.TargetPath = strSource
	objLink.Save
End If

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

Поддерживаемые параметры:

  • /source:[ПУТЬ]обязательный параметр, полный путь к директории или файлу, на который будет ссылаться ярлык.
    Пример: /source:"C:\Windows\System32\Notepad.exe"
  • /destination:[ПУТЬ]обязательный параметр, путь к директории, в которой следует создать ярлык.
    Пример: /destination:"%USERPROFILE%\Desktop"
  • /name:[ИМЯ]обязательный параметр, имя создаваемого ярлыка.
    Пример: /name:"Блокнот"
  • /description:[ОПИСАНИЕ] — необязательный параметр, описание создаваемого ярлыка, которое будет появляться при наведении на него курсором мыши.
    Пример: /description:"Запуск Блокнота"
  • /icon:[ПУТЬ К ФАЙЛУ,ИНДЕКС ЗНАЧКА] — необязательный параметр, пользовательский значок. Следует указать путь к файлу со значками (например, C:\Windows\System32\mmcndmgr.dll), и индекс значка в этом файле (например, 40).
    Пример: /icon:"C:\Windows\System32\mmcndmgr.dll, 40"

Примеры использования:

Создаем ярлык для Блокнота:

CreateShortcut.vbs /source:"C:\Windows\System32\Notepad.exe" /destination:"%USERPROFILE%\Desktop" /name:"Блокнот"

Обычный ярлык.

Создаем ярлык для Блокнота, добавляем ему описание и модный значок:

CreateShortcut.vbs /source:"C:\Windows\System32\Notepad.exe" /destination:"%USERPROFILE%\Desktop" /name:"Блокнот" /description:"Запуск Блокнота" /icon:"C:\Windows\System32\mmcndmgr.dll, 40"

Ярлык с другим значком.

I want my .bat script (test.bat) to create a shortcut to itself so that I can copy it to my windows 8 Startup folder.

I have written this line of code to copy the file but I haven’t yet found a way to create the said shortcut, as you can see it only copies the script.

xcopy "C:\Users\Gabriel\Desktop\test.bat" "C:\Users\Gabriel\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"

Can you help me out?

asked May 4, 2015 at 11:13

Maslor's user avatar

2

You could use a PowerShell command. Stick this in your batch script and it’ll create a shortcut to %~f0 in %userprofile%\Start Menu\Programs\Startup:

powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%userprofile%\Start Menu\Programs\Startup\%~n0.lnk');$s.TargetPath='%~f0';$s.Save()"

If you prefer not to use PowerShell, you could use mklink to make a symbolic link. Syntax:

mklink saveShortcutAs targetOfShortcut

See mklink /? in a console window for full syntax, and this web page for further information.

In your batch script, do:

mklink "%userprofile%\Start Menu\Programs\Startup\%~nx0" "%~f0"

The shortcut created isn’t a traditional .lnk file, but it should work the same nevertheless. Be advised that this will only work if the .bat file is run from the same drive as your startup folder. Also, apparently admin rights are required to create symbolic links.

answered May 4, 2015 at 12:16

rojo's user avatar

rojorojo

24k5 gold badges57 silver badges101 bronze badges

9

Cannot be done with pure batch.Check the shortcutJS.bat — it is a jscript/bat hybrid and should be used with .bat extension:

call shortcutJS.bat -linkfile "%~n0.lnk" -target  "%~f0" -linkarguments "some arguments"

With -help you can check the other options (you can set icon , admin permissions and etc.)

answered May 4, 2015 at 11:25

npocmaka's user avatar

npocmakanpocmaka

55.6k18 gold badges148 silver badges188 bronze badges

4

Rohit Sahu’s answer worked best for me in Windows 10. The PowerShell solution ran, but no shortcut appeared. The JScript solution gave me syntax errors. I didn’t try mklink, since I didn’t want to mess with permissions.

I wanted the shortcut to appear on the desktop.
But I also needed to set the icon, the description, and the working directory.
Note that MyApp48.bmp is a 48×48 pixel image.
Here’s my mod of Rohit’s solution:

@echo off
cd c:\MyApp
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs
echo sLinkFile = "%userprofile%\Desktop\MyApp.lnk" >> CreateShortcut.vbs
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs
echo oLink.TargetPath = "C:\MyApp\MyApp.bat" >> CreateShortcut.vbs
echo oLink.WorkingDirectory = "C:\MyApp" >> CreateShortcut.vbs
echo oLink.Description = "My Application" >> CreateShortcut.vbs
echo oLink.IconLocation = "C:\MyApp\MyApp48.bmp" >> CreateShortcut.vbs
echo oLink.Save >> CreateShortcut.vbs
cscript CreateShortcut.vbs
del CreateShortcut.vbs

answered Jan 28, 2016 at 0:01

DrFractal's user avatar

DrFractalDrFractal

1211 silver badge5 bronze badges

3

The best way is to run this batch file.
open notepad and type:-

@echo off
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs
echo sLinkFile = "GIVETHEPATHOFLINK.lnk" >> CreateShortcut.vbs
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs
echo oLink.TargetPath = "GIVETHEPATHOFTARGETFILEYOUWANTTHESHORTCUT" >> CreateShortcut.vbs
echo oLink.Save >> CreateShortcut.vbs
cscript CreateShortcut.vbs
del CreateShortcut.vbs

Save as filename.bat(be careful while saving select all file types)
worked well in win XP.

answered Jan 25, 2016 at 11:58

Rohit Sahu's user avatar

Rohit SahuRohit Sahu

911 silver badge3 bronze badges

1

Nirsoft’s NirCMD can create shortcuts from a command line, too. (Along with a pile of other functions.) Free and available here:

http://www.nirsoft.net/utils/nircmd.html

Full instructions here:
http://www.nirsoft.net/utils/nircmd2.html#using (Scroll down to the «shortcut» section.)

Yes, using nircmd does mean you are using another 3rd-party .exe, but it can do some functions not in (most of) the above solutions (e.g., pick a icon # in a dll with multiple icons, assign a hot-key, and set the shortcut target to be minimized or maximized).

Though it appears that the shortcutjs.bat solution above can do most of that, too, but you’ll need to dig more to find how to properly assign those settings. Nircmd is probably simpler.

answered Mar 4, 2019 at 1:48

Matt Borcherding's user avatar

To create a shortcut for warp-cli.exe, I based rojo’s Powershell command and added WorkingDirectory, Arguments, IconLocation and minimized WindowStyle attribute to it.

powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%userprofile%\Start Menu\Programs\Startup\CWarp_DoH.lnk');$s.TargetPath='E:\Program\CloudflareWARP\warp-cli.exe';$s.Arguments='connect';$s.IconLocation='E:\Program\CloudflareWARP\Cloudflare WARP.exe';$s.WorkingDirectory='E:\Program\CloudflareWARP';$s.WindowStyle=7;$s.Save()"

Other PS attributes for CreateShortcut: https://stackoverflow.com/a/57547816/4127357

answered Feb 27, 2021 at 19:41

pureocean's user avatar

1

link.vbs

set fs  = CreateObject("Scripting.FileSystemObject")
set ws  = WScript.CreateObject("WScript.Shell")
set arg = Wscript.Arguments

linkFile = arg(0)

set link = ws.CreateShortcut(linkFile)
    link.TargetPath = fs.BuildPath(ws.CurrentDirectory, arg(1))
    link.Save

command

C:\dir>link.vbs ..\shortcut.txt.lnk target.txt

answered Jul 3, 2016 at 3:06

CodeFu's user avatar

I would like to propose different solution which wasn’t mentioned here which is using .URL files:

set SHRT_LOCA=%userprofile%\Desktop\new_shortcut2.url
set SHRT_DEST=C:\Windows\write.exe
echo [InternetShortcut]> %SHRT_LOCA%
echo URL=file:///%SHRT_DEST%>> %SHRT_LOCA%
echo IconFile=%SHRT_DEST%>> %SHRT_LOCA%
echo IconIndex=^0>> %SHRT_LOCA%

Notes:

  • By default .url files are intended to open web pages but they are working fine for any properly constructed URI
  • Microsoft Windows does not display the .url file extension even if «Hide extensions for known file types» option in Windows Explorer is disabled
  • IconFile and IconIndex are optional
  • For reference you can check An Unofficial Guide to the URL File Format of Edward Blake

answered Aug 13, 2019 at 20:39

n3vermind's user avatar

n3vermindn3vermind

2961 silver badge6 bronze badges

2

I present a small hybrid script [BAT/VBS] to create a desktop shortcut.
And you can of course modifie it to your purpose.

@echo off
mode con cols=87 lines=5 & color 9B
Title Shortcut Creator for your batch and applications files by Hackoo 2015
Set MyFile=%~f0
Set ShorcutName=HackooTest
(
echo Call Shortcut("%MyFile%","%ShorcutName%"^)
echo ^'**********************************************************************************************^)
echo Sub Shortcut(ApplicationPath,Nom^)
echo    Dim objShell,DesktopPath,objShortCut,MyTab
echo    Set objShell = CreateObject("WScript.Shell"^)
echo    MyTab = Split(ApplicationPath,"\"^)
echo    If Nom = "" Then
echo    Nom = MyTab(UBound(MyTab^)^)
echo    End if
echo    DesktopPath = objShell.SpecialFolders("Desktop"^)
echo    Set objShortCut = objShell.CreateShortcut(DesktopPath ^& "\" ^& Nom ^& ".lnk"^)
echo    objShortCut.TargetPath = Dblquote(ApplicationPath^)
echo    ObjShortCut.IconLocation = "Winver.exe,0"
echo    objShortCut.Save
echo End Sub
echo ^'**********************************************************************************************
echo ^'Fonction pour ajouter les doubles quotes dans une variable
echo Function DblQuote(Str^)
echo    DblQuote = Chr(34^) ^& Str ^& Chr(34^)
echo End Function
echo ^'**********************************************************************************************
) > Shortcutme.vbs
Start /Wait Shortcutme.vbs
Del Shortcutme.vbs
::***************************************Main Batch*******************************************
cls
echo Done and your main batch goes here !
echo i am a test 
Pause > Nul
::********************************************************************************************

answered May 4, 2015 at 12:36

Hackoo's user avatar

HackooHackoo

18.4k3 gold badges40 silver badges71 bronze badges

I created a VB script and run it either from command line or from a Java process.
I also tried to catch errors when creating the shortcut so I can have a better error handling.

Set oWS = WScript.CreateObject("WScript.Shell")
shortcutLocation = Wscript.Arguments(0)

'error handle shortcut creation
On Error Resume Next
Set oLink = oWS.CreateShortcut(shortcutLocation)
If Err Then WScript.Quit Err.Number

'error handle setting shortcut target
On Error Resume Next
oLink.TargetPath = Wscript.Arguments(1)
If Err Then WScript.Quit Err.Number

'error handle setting start in property
On Error Resume Next
oLink.WorkingDirectory = Wscript.Arguments(2)
If Err Then WScript.Quit Err.Number

'error handle saving shortcut
On Error Resume Next
oLink.Save
If Err Then WScript.Quit Err.Number

I run the script with the following commmand:

cscript /b script.vbs shortcutFuturePath targetPath startInProperty

It is possible to have it working even without setting the ‘Start in’ property in some cases.

answered May 29, 2020 at 12:13

Ciobanu Adrian's user avatar

Based on Rohit’s answer, I created this batch script which accepts the input parameters: AppPath, AppName, AppExtension and ShortcutDestinationPath.

MakeShortcut.bat:

@echo off

set AppPath=%~1
set AppName=%~2
set AppExtension=%~3
set ShortcutDestinationPath=%~4

cd %AppPath%
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs
echo sLinkFile = "%ShortcutDestinationPath%\%AppName%.lnk" >> CreateShortcut.vbs
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs
echo oLink.TargetPath = "%AppPath%\%AppName%.%AppExtension%" >> CreateShortcut.vbs
echo oLink.WorkingDirectory = "%AppPath%" >> CreateShortcut.vbs
echo oLink.Description = "%AppName%" >> CreateShortcut.vbs
echo oLink.IconLocation = "%AppPath%\%AppName%.bmp" >> CreateShortcut.vbs
echo oLink.Save >> CreateShortcut.vbs
cscript CreateShortcut.vbs
rem del CreateShortcut.vbs

Example usage to create a shortcut to C:\Apps\MyApp.exe in the folder C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp:

MakeShortcut.bat "C:\Apps" "MyApp" "exe" "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"

answered Oct 26, 2021 at 20:20

datchung's user avatar

datchungdatchung

3,9081 gold badge28 silver badges30 bronze badges

There is some very useful information on this site: http://ss64.com/nt/shortcut.html

Seems like there is some shortcut.exe in some resource kit which I don’t have.
As many other sites mention, there is no built-in way to do it from a batch file.

But you can do it from a VB script:

Optional sections in the VBscript below are commented out:

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

So, if you really must do it, then you could make your batch file write the VB script to disk, invoke it and then remove it again. For example, like so:

@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

Running the above script results in a new shortcut on my desktop:
Resulting shortcut

Here’s a more complete snippet from an anonymous contributor (updated with a minor fix):

@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

В составе пакета Resource Kit для Windows Server предоставляется утилита SHORTCUT.EXE, которая используется для создания файлов с расширением .LNK.

Утилита позволяет указывать не только ресурсы, для которых необходимо создать ярлык, но и необходимую значок. Например:

shortcut – t «d:\program files\windata\test.exe» -n «Win Data.lnk» – i «d:\program files\winicons\icon1.ico» -x 0 – d «e:\windatazz\data»

Как же это расшифровывается?

· -t — расположение ресурса, на который должен указывать ярлык.

· -n — имя файла ярлыка, который будет создаваться.

· -i — файл значка.

· -x — индекс значка для поиска в файле пиктограмм

· -d — начальный каталог для программы, на которое указывает ярлык.

Файл SHORTCUT.EXE можно скопировать с компакт-диска Resource Kit. Он расположен в каталоге <processor>\desktop (например, i386\desktop). Кроме файла SHORTCUT.EXE другие файлы не понадобятся.

2 Answers

answered Feb 29, 2016 at 21:37

Jenia Dysin's user avatar

1

  • This reply is wrong. mklink command creates a symbolic link, not a shortcut. These are two different things in Windows.

    Oct 7, 2021 at 15:20

Give a try for this example to run it with administrator privileges :

@echo off
cls & color 0A & echo.
Mode con cols=60 lines=5
Title Create a shortcut by using windows command line
:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights
:::::::::::::::::::::::::::::::::::::::::
CLS
Echo.
Echo.
ECHO           **************************************
ECHO            Running Admin shell... Please wait...
ECHO           **************************************

:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

:getPrivileges
if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges)
Echo.
ECHO.
ECHO           **************************************
ECHO            Invoking UAC for Privilege Escalation
ECHO           **************************************

setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
(
ECHO Set UAC = CreateObject^("Shell.Application"^)
ECHO args = "ELEV "
ECHO For Each strArg in WScript.Arguments
ECHO args = args ^& strArg ^& " "
ECHO Next
ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 
)> "%temp%\OEgetPrivileges.vbs"
"%SystemRoot%\System32\WScript.exe" "%temp%\OEgetPrivileges.vbs" %*
exit /B

:gotPrivileges
if '%1'=='ELEV' shift /1
setlocal & pushd .
cd /d "%~dp0"
::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::
cls
mklink /d sysfolder "%windir%\system32\"
Pause

answered Feb 29, 2016 at 22:49

Hackoo's user avatar

HackooHackoo

18.4k3 gold badges40 silver badges71 bronze badges

0

  • Windows удалить папку с подпапками
  • Windows удаленно выключить компьютер windows
  • Windows удалить маршрут по умолчанию
  • Windows сообщила что изменилось аппаратное оборудование устройства код ошибки 0xc004f211 windows 10
  • Windows удаление файлов мимо корзины