создание ярлыка для exe из командного файла

как создать ярлык для exe из батника.

Я пытался

call link.bat "c:\program Files\App1\program1.exe" "C:\Documents and Settings\%USERNAME%\Desktop" "C:\Documents and Settings\%USERNAME%\Start Menu\Programs" "Program1 shortcut"

но это не сработало.

link.bat можно найти по адресу http://www.robvanderwoude.com/amb_shortcuts.html.


person sundar venugopal    schedule 06.12.2008    source источник
comment
Не думайте, что Program Files находится в папке C:\Program Files. (Хотя %PROGRAMFILES% может работать). Точно так же не предполагайте, что домашний каталог пользователя находится в C:\Documents and Settings\%USERNAME% (это %HOMEDIR%). И рабочий стол не может называться рабочим столом.   -  person Jay Bazuzi    schedule 12.02.2009
comment
Есть ли решение для создания ярлыков в Windows 7?   -  person Sandeep Yohans    schedule 03.01.2013
comment
@JayBazuzi это %HomePath% в Windows 7, 8 и Server 2012. :)   -  person kodybrown    schedule 28.10.2013


Ответы (9)


Ваша ссылка указывает на версию Windows 95/98, и я предполагаю, что у вас есть по крайней мере Windows 2000 или XP. Вам следует попробовать версию для NT здесь.

В качестве альтернативы используйте небольшой VBScript, который вы можете вызвать из командной строки:

set objWSHShell = CreateObject("WScript.Shell")
set objFso = CreateObject("Scripting.FileSystemObject")

' command line arguments
' TODO: error checking
sShortcut = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(0))
sTargetPath = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(1))
sWorkingDirectory = objFso.GetAbsolutePathName(sShortcut)

set objSC = objWSHShell.CreateShortcut(sShortcut) 

objSC.TargetPath = sTargetPath
objSC.WorkingDirectory = sWorkingDirectory

objSC.Save

Сохраните файл как createLink.vbs и назовите его так, чтобы получить то, что вы изначально пробовали:

cscript createLink.vbs "C:\Documents and Settings\%USERNAME%\Desktop\Program1 shortcut.lnk" "c:\program Files\App1\program1.exe" 
cscript createLink.vbs "C:\Documents and Settings\%USERNAME%\Start Menu\Programs\Program1 shortcut.lnk" "c:\program Files\App1\program1.exe" 

Тем не менее, я призываю вас не использовать жестко заданные пути, такие как «Меню «Пуск», поскольку они отличаются в локализованных версиях Windows. Вместо этого измените сценарий, чтобы использовать специальные папки.

person VVS    schedule 06.12.2008
comment
Я добавил пару строк для правильной установки рабочего каталога, если целью является исполняемый файл — без этого любой исполняемый файл, который ожидает запуска из своего собственного каталога, завершится ошибкой, обычно с бессмысленным сообщением об ошибке. - person Mason; 21.06.2012
comment
@Mason: Не могли бы вы опубликовать свои улучшения? Мне бы действительно помогло. - person aRestless; 12.07.2012
comment
@aRestless: Извините, я отправил редактирование, и оно, по-видимому, было отклонено. Мод добавляет следующее прямо перед objSC.Save: If InStr(sTargetPath, .exe) › 0 Then objSC.WorkingDirectory = Left(sTargetPath, InStrRev(sTargetPath, \)) End If - person Mason; 13.07.2012
comment
@aRestless: Как и было предложено, и поскольку Мейсон не может редактировать сообщение, я обновил скрипт, чтобы установить рабочий каталог. - person VVS; 20.07.2012

Это то, в чем PowerShell действительно хорош, и поэтому это причина отказаться от пакетных файлов и перейти на PowerShell.

PowerShell может взаимодействовать с .NET. Например, вы можете получить местоположение рабочего стола следующим образом:

[Environment]::GetFolderPath("Desktop")

PowerShell может взаимодействовать с объектами COM, включая WScript.Shell, которые могут создавать ярлыки:

New-Object -ComObject WScript.Shell).CreateShortcut( ... )

Таким образом, ваш сценарий может выглядеть так:

$linkPath = Join-Path ([Environment]::GetFolderPath("Desktop")) "MyShortcut.lnk"
$targetPath = Join-Path ([Environment]::GetFolderPath("ProgramFiles")) "MyCompany\MyProgram.exe"
$link = (New-Object -ComObject WScript.Shell).CreateShortcut( $linkpath )
$link.TargetPath = $targetPath
$link.Save()

Ярлыки имеют множество параметров, которыми WScript.Shell не может управлять, например параметр «запуск от имени администратора». Доступ к ним возможен только через интерфейс Win32 IShellLinkDataList, использовать который очень сложно, но можно.

person Jay Bazuzi    schedule 12.02.2009

Использование VB-скрипта:

set WshShell = WScript.CreateObject("WScript.Shell" )
strDesktop = WshShell.SpecialFolders("AllUsersDesktop" )
set oShellLink = WshShell.CreateShortcut(strDesktop & "\shortcut name.lnk" )
oShellLink.TargetPath = "c:\application folder\application.exe"
oShellLink.WindowStyle = 1
oShellLink.IconLocation = "c:\application folder\application.ico"
oShellLink.Description = "Shortcut Script"
oShellLink.WorkingDirectory = "c:\application folder"
oShellLink.Save 

Ссылка: http://www.tomshardware.com/forum/52871-45-creating-desktop-shortcuts-command-line

В противном случае быстрый поиск в Google показывает, что существует ряд сторонних инструментов, которые могут создавать файлы .lnk для ярлыков приложений. Я предполагаю, что вам нужно придерживаться того, что изначально доступно в Windows? VBscript, вероятно, ваш лучший выбор, в противном случае я бы предложил попробовать скопировать файл .lnk с вашего компьютера или использовать его в качестве образца, чтобы увидеть правильный формат для файла ярлыка.

person Jay    schedule 06.12.2008

На XP я написал makeshortcut.vbs

Set oWS = WScript.CreateObject("WScript.Shell")
If wscript.arguments.count < 4 then
  WScript.Echo "usage: makeshortcut.vbs shortcutPath targetPath arguments workingDir "
  WScript.Quit
end If
shortcutPath = wscript.arguments(0) & ".LNK"
targetPath = wscript.arguments(1)
arguments = wscript.arguments(2)
workingDir = wscript.arguments(3)

WScript.Echo "Creating shortcut " & shortcutPath & " targetPath=" & targetPath & " arguments=" & arguments & " workingDir=" & workingDir

Set oLink = oWS.CreateShortcut(shortcutPath) 
oLink.TargetPath = targetPath
oLink.Arguments = arguments
' oLink.Description = "MyProgram"
' oLink.HotKey = "ALT+CTRL+F"
' oLink.IconLocation = "C:\Program Files\MyApp\MyProgram.EXE, 2"
' oLink.WindowStyle = "1"
oLink.WorkingDirectory = workingDir
oLink.Save

Он занимает ровно 4 аргумента, поэтому его можно улучшить, сделав последние 2 необязательными. Я публикую только потому, что это повторяет использование, что может быть полезно для некоторых. Мне нравится решение WS с использованием специальных папок и ExpandEnvironmentStrings.

person Martin yarwood    schedule 17.11.2010

Дополнительное примечание: используемый вами link.bat предназначен только для Windows 95/98:

Этот пакетный файл предназначен только для Windows 95/98. Я скоро опубликую эквивалент NT в группе новостей NT.

Вместо этого версия для NT размещается по адресу http://www.robvanderwoude.com/amb_shortcutsnt.html. Вы можете попробовать это для подхода .bat, если предпочитаете vbscript.

person Jay    schedule 06.12.2008

Альтернативный метод с использованием сторонней утилиты:

Создание ярлыка из командной строки (пакетный файл)

ССЫЛКА:

С помощью XXMKLINK вы можете написать пакетный файл для установки программного обеспечения, который выполняется специализированными программами установки. По сути, XXMKLINK — это инструмент, который собирает различную информацию из командной строки и упаковывает ее в ярлык.

xxmklink spath opath 

where 

  spath     path of the shortcut (.lnk added as needed)
  opath     path of the object represented by the shortcut
person Martin    schedule 06.12.2008

Вы можете проверить shortcutjs.bat:

::creates a shortcut that will start the target with minimized window and admin permissions
shortcutjs.bat -linkfile myscriptMin.lnk -target "%cd%\myscript.bat" -windowstyle 7 -adminpermissions yes

::creates a shortcut with a hot keys
shortcutjs.bat -linkfile myscriptHK.lnk -target "%cd%\myscript.bat" -hotkey "ALT+CTRL+P"

При этом вы также можете редактировать существующий ярлык или отображать только его свойства.

person npocmaka    schedule 21.06.2014

Это сработало для меня в Windows XP ms-dos, я еще не пробовал это в Windows 7. Это похоже на создание символической ссылки в Linux.

shortcut -T source.exe destination.lnk
person Gabriel Ramirez    schedule 16.03.2012
comment
@henginy ты пробовал команду? Это делается с помощью Windows Script Host. - person Gabriel Ramirez; 21.03.2013
comment
Конечно, но я пробовал это в командной строке, так как не указано иное. Я также попробую в WS Host. - person henginy; 22.03.2013
comment
Средства поддержки Windows 95 и набор ресурсов сервера NT 4 содержали инструмент shortcut.exe. Существует также бесплатная программа shortcut.exe от Optimum X. - person Mofi; 04.10.2014

В конце концов я решил написать правильный скрипт, потому что ни одно решение мне не подходит. Вам понадобятся два файла Local Settings\ first

создатьSCUT.bat

@echo on
set VBS=createSCUT.vbs 
set SRC_LNK="shortcut1.lnk"
set ARG1_APPLCT="C:\Program Files\Google\Chrome\Application\chrome.exe"
set ARG2_APPARG="--profile-directory=QuteQProfile 25QuteQ"
set ARG3_WRKDRC="C:\Program Files\Google\Chrome\Application"
set ARG4_ICOLCT="%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Profile 25\Google Profile.ico"
cscript %VBS% %SRC_LNK% %ARG1_APPLCT% %ARG2_APPARG% %ARG3_WRKDRC% %ARG4_ICOLCT%

и второй

создатьSCUT.vbs

Set objWSHShell = WScript.CreateObject("WScript.Shell")
set objWSHShell = CreateObject("WScript.Shell")
set objFso = CreateObject("Scripting.FileSystemObject")
If WScript.arguments.count = 5 then
    WScript.Echo "usage: makeshortcut.vbs shortcutPath targetPath arguments workingDir IconLocation"
    sShortcut = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(0))
    set objSC = objWSHShell.CreateShortcut(sShortcut) 
    sTargetPath = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(1))
    sArguments = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(2))
    sWorkingDirectory = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(3))
    sIconLocation = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(4))
    objSC.TargetPath = sTargetPath
    rem http://www.bigresource.com/VB-simple-replace-function-5bAN30qRDU.html#
    objSC.Arguments = Replace(sArguments, "QuteQ", Chr(34))
    rem http://msdn.microsoft.com/en-us/library/f63200h0(v=vs.90).aspx http://msdn.microsoft.com/en-us/library/267k4fw5(v=vs.90).aspx
    objSC.WorkingDirectory = sWorkingDirectory
    objSC.Description = "Love Peace Bliss"
    rem 1 restore 3 max 7 min
    objSC.WindowStyle = "3"
    rem objSC.Hotkey = "Ctrl+Alt+e";
    objSC.IconLocation = sIconLocation
    objSC.Save
    WScript.Quit
end If
If WScript.arguments.count = 4 then
    WScript.Echo "usage: makeshortcut.vbs shortcutPath targetPath arguments workingDir "

    sShortcut = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(0))
    set objSC = objWSHShell.CreateShortcut(sShortcut) 
    sTargetPath = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(1))
    sArguments = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(2))
    sWorkingDirectory = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(3))
    objSC.TargetPath = sTargetPath
    objSC.Arguments = Replace(sArguments, "QuteQ", Chr(34))
    objSC.WorkingDirectory = sWorkingDirectory
    objSC.Description = "Love Peace Bliss"
    objSC.WindowStyle = "3"
    objSC.Save
    WScript.Quit
end If
If WScript.arguments.count = 2 then
    WScript.Echo "usage: makeshortcut.vbs shortcutPath targetPath"
    sShortcut = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(0))
    set objSC = objWSHShell.CreateShortcut(sShortcut) 
    sTargetPath = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(1))
    sWorkingDirectory = objFso.GetAbsolutePathName(sShortcut)
    objSC.TargetPath = sTargetPath
    objSC.WorkingDirectory = sWorkingDirectory
    objSC.Save
    WScript.Quit
end If
person Michael Przybylski    schedule 06.10.2013