108 votes

Comment créer un raccourci à partir de CMD ?

Comment puis-je créer un fichier de raccourci ( .lnk ) vers un autre fichier ou un exécutable, en utilisant des utilitaires de ligne de commande ?

73voto

diegogs Points 624

Il y a des informations très utiles sur ce site : http://ss64.com/nt/shortcut.html

Il semble qu'il y ait shortcut.exe dans un kit de ressources que je n'ai pas.
Comme de nombreux autres sites le mentionnent, il n'y a pas de moyen intégré de le faire à partir d'un fichier batch.

Mais vous pouvez le faire à partir d'un script VB :

Les sections facultatives dans le VBscript ci-dessous sont commentées :

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

Donc, si vous voulez vraiment doit le faire, alors vous pourriez faire en sorte que votre fichier batch écrive le script VB sur le disque, l'invoquer et ensuite le supprimer à nouveau. Par exemple, comme ceci :

@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

En exécutant le script ci-dessus, j'obtiens un nouveau raccourci sur mon bureau :
Resulting shortcut

Voici un extrait plus complet d'un contributeur anonyme (mis à jour avec une correction mineure) :

@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

42voto

Tomas Points 11

Voici une solution similaire utilisant powershell (je sais, vous pouvez probablement réécrire tout votre fichier batch dans PS, mais si vous voulez juste 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()"

Vous devrez peut-être spécifier explicitement le chemin d'accès à PS dans votre fichier, mais cela devrait fonctionner. Il y a quelques attributs supplémentaires que vous pouvez manipuler avec cet objet, aussi :

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}

23voto

Plato Points 101

Outre shortcut.exe, vous pouvez également utiliser la version en ligne de commande de NirCmd pour créer un raccourci. http://nircmd.nirsoft.net/shortcut.html

21voto

Mike Points 177

Comment utiliser la commande mklink ? C:\Windows\System32 >mklink Crée un lien symbolique.

MKLINK [[/D] | [/H] | [/J]] Lien cible

    /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.

13voto

Jimadine Points 1180

Si vous avez Git installé, il est fourni avec create-shortcut.exe qui vous permet de créer des raccourcis à partir de la ligne de commande, et qui fonctionne sous Windows 10. Cet utilitaire n'est pas AFAICT publiquement documenté, et la --help est minimal :

Usage: create-shortcut.exe [options] <source> <destination>

Cependant, en utilisant la méthode de Sysinternals strings pour extraire des chaînes de caractères de la base de données .exe j'ai réussi à trouver le [options] et les correspondances avec les champs indiqués dans les raccourcis Properties page :

--work-dir ('Start in' field)
--arguments (tacked onto the end of the 'Target')
--show-cmd (I presume this is the 'Run' droplist, values 'Normal window', 'Minimised', 'Maximised')
--icon-file (allows specifying the path to an icon file for the shortcut)
--description ('Comment' field)

Exemple d'utilisation :

REM If bin folder already in your PATH, omit CD line:
cd /d "C:\Program Files\Git\mingw64\bin" 
create-shortcut.exe --work-dir "C:\path\to\files" --arguments "--myarg=myval" "C:\path\to\files\file.ext" "C:\path\to\shortcuts\shortcut.lnk"

El strings L'utilitaire révèle également la compatibilité des applications avec Windows Vista, 7, 8, 8.1 et 10.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X