Windows, Windows 10, Windows 7, Windows 8, Windows Server, Windows Vista, Windows XP
Создаем ярлык через командную строку
- 01.05.2021
- 8 685
- 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
В статье описывается приём, с помощью которого вы можете, не набирая вручную в cmd, создать ярлык для команды консоли для запуска системных утилит Windows: chkdsk, sfc, ipconfig и других быстрых команд, позволяющих попасть в нужное окно системных настроек. С их списком вы можете ознакомиться на странице Быстрые команды Windows. А создаваемый нами ярлык можно попросить самостоятельно закрывать окно и записывать результаты в специальный файл (для консоли cmd, конечно).
Ярлыки — отличный вариант быстрого доступа к любому файлу или программе для мгновенного запуска или просмотра. Однако многие функции в Windows, а большинство из них очень полезные для разрешения именно проблем с системой, доступны только по введению с клавиатуры специального набора символов в командной строке (cmd или PowerShell). То есть изначально в Windows эта «тема» не проработана. Да, можно открыть консоль, написать команду и запустить её. Можно создать батник и запускать уже конкретный файл. Если для какой-то операции требуется запуск нескольких таких утилит последовательно, то уж лучше написать скрипт.
Но если некоторые из команд, которые слушаются только консоли, вы запускаете время от времени по одиночке, решая проблемы с проверкой системы, состоянием диска, очисткой DNS записей или дефрагментацией, вы можете просто создать для того специальный ярлык. Так, с Рабочего стола можно запускать любую cmd-команду двойным кликом мыши.
Как создать ярлык для команды консоли: сначала сам ярлык
- правой кнопкой мыши на Рабочем столе, Создать -> Ярлык:
-
- В поле расположения объекта наберите команду в таком формате:
"C:\Windows\System32\cmd.exe" /k команда
где
-
-
- в кавычках скрипт вызывает командную консоль из системной папки
- флаг /k заставит скрипт отображаться в консоли, которая останется открытой в течение работы команды и после, чтобы можно было посмотреть результаты или дополнить следующей (однако, если открытое окно консоли после исполнения команды не нужно, флаг /k можно заменить на /c)
- часть команда — собственно, название утилиты, которая будет запускаться
-
Например, если вы собираетесь создать ярлык для проверки целостности файловой системы Windows, скрипт на этапе создания ярлыка будет таким:
"C:\Windows\System32\cmd.exe" /k sfc /scannow
Многие из них потребуют для запуска прав администратора:
Таким образом можно решить вопрос создания ярлыка для всех системных утилит, которые располагаются в папке System32 и не только.
Как создать ярлык для команды консоли: результаты — в текстовый файл
Давайте расширим возможности создаваемого ярлыка. Заставим его проверить системные файлы, после проверки закрыть окно консоли и результаты проверки сохранить в файл scannow.txt :
"C:\Windows\System32\cmd.exe" /c sfc /scannow > "C:\Users\Desktop\scannow.txt"
где C:\Users\1\Desktop\scannow.txt — путь к файлу на Рабочем столе:
Обратите внимание на значок > . Если вы будете использовать этот флаг в одиночном виде (как представлено в команде), Windows будет просто перезаписывать указанный вами файл. Однако, если вы желаете сохранять результаты работы утилиты, сохраняя предыдущие, используйте сдвоенный флаг >> .
Что ещё… Можно придать ярлыку для созданной утилиты более приглядный и красочный вид (сменить рисунок). Это, я думаю, вы умеете делать:
Ярлыки к другим быстрым командам
С системными утилитами мы разобрались: ярлык указывает в своём наименовании путь, по которому утилита и располагается. А что же с остальными полезными командами, которые позволяют попасть в нужное нам окно настроек? Согласитесь, как было бы удобнее, нажав на ярлык, сразу попасть, скажем, в настройки Сетевых подключений?
Работаем…
Смысл такой же. Только здесь ярлыку (то бишь проводнику системы) придётся иметь дело не с утилитами, которые представляют собой обычные программы с интерфейсом или без, а с библиотеками готовых скриптов, исполняя которые Windows вас перекидывает куда надо. Создаём ярлык снова и в поле расположения указываем такую команду (для Сетевых подключений и сделаем):
C:\windows\system32\ncpa.cpl
Назову его Сетевые соединения и сменю значок:
Запускаем и проверяем:
Ту же операцию можно провернуть и к более скрытым командам, которые исполняются исключительно в форме скриптов. Так, для Центра управления сетями и общим доступом ярлык будет выглядеть так. Команда из cmd, его вызывающая (один из вариантов) выглядит так:
C:\Windows\explorer.exe shell:::{8E908FC9-BECC-40f6-915B-F4CA0E70D03D}
а, значит, в ярлыке путь аналогичный:
Успехов вам.
В составе пакета 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 другие файлы не понадобятся.