¿Cómo puedo crear un archivo de acceso directo ( .lnk
) a otro archivo o ejecutable, utilizando las utilidades de línea de comandos?
fuente
¿Cómo puedo crear un archivo de acceso directo ( .lnk
) a otro archivo o ejecutable, utilizando las utilidades de línea de comandos?
Hay información muy útil en este sitio: http://ss64.com/nt/shortcut.html
Parece que hay algunos shortcut.exe
en algún kit de recursos que no tengo.
Como muchos otros sitios mencionan, no hay una forma integrada de hacerlo desde un archivo por lotes.
Pero puedes hacerlo desde un script VB:
Las secciones opcionales en el VBscript a continuación se comentan:
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
Entonces, si realmente debe hacerlo, entonces podría hacer que su archivo por lotes escriba el script VB en el disco, invocarlo y luego eliminarlo nuevamente. Por ejemplo, así:
@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
Ejecutar el script anterior da como resultado un nuevo acceso directo en mi escritorio:
Aquí hay un fragmento más completo de un colaborador anónimo (actualizado con una corrección menor):
@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
SET Esc_LinkTarget=%0
entonces usted tiene que quitar el "
deecho oLink.TargetPath = oWS.ExpandEnvironmentStrings^(!Esc_LinkTarget!^)
Wscript.Arguments
para obtener los argumentos de la línea de comando ... jajaja
Aquí hay una solución similar usando powershell (lo sé, probablemente puedas reescribir todo tu archivo por lotes en PS, pero si solo quieres Get It Done ™ ...)
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()"
Puede que tenga que especificar explícitamente la ruta a PS en su archivo, pero debería funcionar. También hay algunos atributos adicionales que puede modificar a través de este objeto:
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}
Además de shortcut.exe, también puede usar la versión de línea de comandos de NirCmd para crear un acceso directo. http://nircmd.nirsoft.net/shortcut.html
¿Qué tal usar el comando mklink? C: \ Windows \ System32> mklink Crea un enlace simbólico.
MKLINK [[/ D] | [/ H] | [/ J]] Objetivo de enlace
/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.
Después de todas las discusiones que tuvimos aquí, esta es mi solución sugerida: descargue: http://optimumx.com/download/Shortcut.zip,
extráigala en su escritorio (por ejemplo). Ahora, suponga que desea crear un acceso directo para un archivo llamado scrum.pdf (también en el escritorio):
1. abra CMD y vaya a la carpeta del escritorio
2. ejecute:Shortcut.exe /f:"%USERPROFILE%\Desktop\sc.lnk" /a:c /t:%USERPROFILE%\Desktop\scrum.pdf
creará un acceso directo llamado sc.lnk en su escritorio que apuntará al archivo original (scrum.pdf)
Este programa gratuito requiere la funcionalidad http://www.nirsoft.net/utils/nircmd2.html : (muestra de dicha página web)
"Create a shortcut to Windows calculator under Start Menu->Programs->Calculators nircmd.exe shortcut "f:\winnt\system32\calc.exe" "~$folder.programs$\Calculators" "Windows Calculator"
Mi propia muestra para probar: acceso directo nircmd.exe "c: \ windows \ system32 \ calc.exe" "~ $ folder.desktop $" "Calculadora de Windows"
Sé que este tema es antiguo, pero quería proporcionar la solución simple que funcionó para mí.
Primero copié el archivo .ico en mi unidad C:. Luego creé el acceso directo en mi escritorio y configuré el ícono en el archivo ico en mi unidad C :. Luego copié el .ico y el acceso directo a un recurso compartido de red al que mis usuarios tienen acceso. Una vez allí, escribí el siguiente archivo por lotes para copiar el ico y .url en el escritorio de Windows 7 de los usuarios. Esto crea el acceso directo en el escritorio de todos los usuarios y mantiene el archivo de icono que configuré al crear el acceso directo. Espero que esto ayude a alguien.
@echo off
Copy "\\sharename\folder\icon.ico" "C:\"
pause
copy "\\sharename\folder\shortcut.url" "C:\Users\All Users\Desktop"
pause
(.ink file)
, ya que había cierta confusión. Revisé la pregunta para reflejar el comentario de Shantanu. Si bien proporciona una forma de hacer 'accesos directos', no responde a esta pregunta específica.