Comment créer un raccourci depuis CMD?


76

Comment créer un fichier raccourci ( .lnk) vers un autre fichier ou un exécutable, à l'aide d'utilitaires de ligne de commande?


1
Il ne semble pas y avoir de moyen simple de le faire. Certaines personnes ont des outils écrits qui vous permettent de le faire; en voici un . Une recherche Google sur "Windows crée un raccourci en ligne de commande" en révèle d'autres. (Je n'en ai essayé aucun.)
Keith Thompson

@iglvzx - Je ne suis pas sûr que le montage que vous avez effectué soit correct. Je ne pense pas que Shantanu ait besoin d'un script batch - cela pourrait être un moyen de créer un * .lnk dans un autre fichier * .exe.
Alfasin

@alfasin j'ai ajouté (.ink file), car il y avait une certaine confusion. J'ai révisé la question pour refléter le commentaire de Shantanu. Bien que vous fournissiez un moyen de créer des «raccourcis», cela ne répond pas à cette question précise.
iglvzx

1
Utilisez les éléments suivants: powershell "$ s = (New-Object -COM WScript.Shell) .CreateShortcut ('% userprofile% \ Desktop \ shortcut.lnk'); $ s.TargetPath = 'C: \ Windows \'; $ s .Save () "Evidemment, remplacez" '% userprofile% \ Desktop \ shortcut.lnk "et" C: \ Windows \ "par votre chemin de raccourci et votre chemin cible, respectivement.
cowlinator

@ cowlinator Comme vous l'avez tapé, votre suggestion ne fonctionne pas.
Ploni

Réponses:


53

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

On dirait qu'il y en a shortcut.exedans une trousse de ressources que je n'ai pas.
Comme de nombreux autres sites le mentionnent, il n’existe pas de méthode intégrée permettant de le faire à partir d’un fichier de commandes.

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

Les sections facultatives du 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 devez vraiment le faire, vous pouvez faire en sorte que votre fichier de commandes écrive le script VB sur le disque, l’appelle puis le supprime à 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

L'exécution du script ci-dessus crée un nouveau raccourci sur mon bureau:
Raccourci résultant

Voici un extrait plus complet d'un contributeur anonyme (mis à jour avec un correctif mineur):

@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

1
Connexes: MSDN, Liens Shell
iglvzx

Cela fonctionne très bien pour un raccourci vers un fichier. Cependant, je rencontre un problème étrange lorsque je l'utilise pour créer un raccourci vers un dossier, lorsque ma variable Esc_LinkTarget contient une variable d'environnement qui tente d'obtenir son dossier parent. (Quelque chose comme% CD% \ .. ne fonctionne pas, mais% CD% fonctionne). Le type de cible de raccourci devient un "Fichier" au lieu de "Dossier"
EDM

1
@ Edmund Problème intéressant. Je n’ai pas le temps d’examiner la question, mais j’imagine qu’une simple barre oblique pourrait faire toute la différence.
Der Hochstapler

Remarque: si vous utilisez, SET Esc_LinkTarget=%0vous devez supprimer le "deecho oLink.TargetPath = oWS.ExpandEnvironmentStrings^(!Esc_LinkTarget!^)
Black

Au lieu de créer un vbscript pour chaque exécution, il aurait été préférable d'utiliser Wscript.Argumentsles arguments de la ligne de commande ... lol
Sancarn

22

Voici une solution similaire utilisant powershell (je sais, vous pouvez probablement réécrire tout votre fichier de commandes dans PS, mais si vous voulez juste le faire.)

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 existe également d'autres attributs que vous pouvez modifier dans cet objet:

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} 

Trix : Si vous pensez avoir un meilleur moyen de le faire , postez-le simplement comme une nouvelle réponse (en vous connectant à celle-ci, le cas échéant).
Scott


10

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

MKLINK [[/ D] | [/ H] | [/ J]] cible de lien

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

10
Bonne idée, mais les liens symboliques semblent se comporter un peu différemment des raccourcis. Si je crée un raccourci vers une solution Visual Studio, tous les projets relatifs au chemin relatif sont correctement ouverts. Cependant, si j'ouvre la même solution via un lien symbolique, le répertoire de travail est celui du chemin dans lequel réside le lien symbolique, pas le chemin auquel il fait référence.
Walter Stabosz

7

Après toutes les discussions que nous avons eu ici, voici ma solution suggérée: téléchargez: http://optimumx.com/download/Shortcut.zip extrayez-le sur votre bureau (par exemple). Supposons maintenant que vous souhaitiez créer un raccourci pour un fichier appelé scrum.pdf (également sur le bureau):
1. Ouvrez CMD et accédez au dossier du bureau
2. Exécutez:Shortcut.exe /f:"%USERPROFILE%\Desktop\sc.lnk" /a:c /t:%USERPROFILE%\Desktop\scrum.pdf

il créera sur votre bureau un raccourci appelé sc.lnk qui pointera vers le fichier d'origine (scrum.pdf)


Ce n'est pas un raccourci. c'est juste un fichier de commandes qui appelle un programme spécifié.
Keith Thompson

1
un raccourci est quelque chose que vous exécutez à partir de Windows, puisqu'il a utilisé CMD dans le titre et a placé la balise "ligne de commande" J'ai supposé qu'il voulait l'exécuter à partir de CMD. Un fichier de commandes est l'équivalent d'un "raccourci" Windows lorsque vous exécutez dans CMD (comme) env.
Alfasin

2
Puisqu'il a mis "shortcut (fichier .lnk)" dans le corps de la question, j'ai supposé qu'il voulait créer un raccourci réel.
Keith Thompson

1
Désolé pour la clarté, je voulais avoir une icône sur mon bureau que j'ai faite dans cmd qui serait un raccourci vers un fichier exe
Shantanu

maintenant que j'ai enfin compris (penseur lent - que pouvez-vous faire ...) j'ai changé ma réponse. J'espère que ça aide!
alfasin

0

Ce programme gratuit a la fonctionnalité requise http://www.nirsoft.net/utils/nircmd2.html : (exemple de cette page 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"

Mon propre échantillon à essayer: raccourci nircmd.exe "c: \ windows \ system32 \ calc.exe" "~ $ folder.desktop $" "Calculatrice Windows"


0

Je sais que ce sujet est ancien mais je voulais fournir la solution simple qui a fonctionné pour moi.

J'ai d'abord copié le fichier .ico sur mon lecteur C :. Ensuite, j'ai créé le raccourci sur mon bureau et défini l'icône sur le fichier ico de mon lecteur C :. J'ai ensuite copié le fichier .ico et le raccourci vers un partage réseau auquel mes utilisateurs ont accès. Une fois là, j’ai écrit le fichier de commandes suivant pour copier l’ico et le .url sur le bureau Windows 7 de l’utilisateur. Cela crée le raccourci sur le bureau de tous les utilisateurs et conserve le fichier d'icône que j'ai défini lors de la création du raccourci. J'espère que ça aidera quelqu'un.

@echo off
Copy "\\sharename\folder\icon.ico" "C:\"
pause
copy "\\sharename\folder\shortcut.url" "C:\Users\All Users\Desktop"
pause

Si telle est l'approche à adopter, il est préférable de créer le raccourci réel (.lnk) dans lequel l'icône est intégrée. Ce raccourci peut alors être copié partout.
LPChip
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.