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
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
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
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
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 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
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
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
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
andIconIndex
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
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
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
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
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:
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
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
HackooHackoo
18.4k3 gold badges40 silver badges71 bronze badges
0