Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

How can I create a shortcut file (.lnk) to another file or executable, using command line utilities?

share|improve this question
1  
There doesn't appear to be any straightforward way to do that. Some people have written tools that let you do it; here's one of them. A Google search for "windows create shortcut command line" turns up some others. (I haven't tried any of them.) –  Keith Thompson Feb 20 '12 at 18:51
    
@iglvzx - I'm not sure that the editing you did is correct. I don't think that Shantanu needs a batch script - it could be any way of creating a *.lnk to another *.exe file. –  alfasin Feb 20 '12 at 19:53
    
@alfasin I added (.ink file), as there was some confusion. I revised the question to reflect Shantanu's comment. While you do provide a way to make 'shortcuts', it does not answer this specific question. –  iglvzx Feb 20 '12 at 19:57
    
@iglvzx understood, thanks! –  alfasin Feb 21 '12 at 1:26

6 Answers 6

up vote 21 down vote accepted

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:
Resulting shortcut

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
share|improve this answer
    
Related: MSDN, Shell Links –  iglvzx Feb 20 '12 at 20:11

After all the discussions we had here, this is my suggested solution: download: http://optimumx.com/download/Shortcut.zip extract it on your desktop (for example). Now, suppose you want to create a shortcut for a file called scrum.pdf (also on desktop):
1. open CMD and go to desktop folder
2. run: Shortcut.exe /f:"%USERPROFILE%\Desktop\sc.lnk" /a:c /t:%USERPROFILE%\Desktop\scrum.pdf

it will create a shortcut called sc.lnk on your desktop that will point to the original file (scrum.pdf)

share|improve this answer
    
That's not a shortcut; it's just a batch file that invokes a specified program. –  Keith Thompson Feb 20 '12 at 18:47
1  
a shortcut is something you run from windows, since he used CMD in the title and put the tag "command-line" I assumed he wants to run it from CMD. A batch file is the equivalent of a windows "shortcut" when you run in CMD (dos like) env. –  alfasin Feb 20 '12 at 18:51
1  
Since he put "shortcut (.lnk file)" in the body of the question, I assumed he wants to create an actual shortcut. –  Keith Thompson Feb 20 '12 at 18:52
1  
sorry for clarity i wanted to have a icon on my desktop that i made in cmd that would be a shortcut to a exe file –  Shantanu Feb 20 '12 at 19:23
    
now that I finally understood (slow thinker - what can you do...) I changed my answer. hope it helps! –  alfasin Feb 21 '12 at 1:42

Besides shortcut.exe, you can also use the command line version of NirCmd to create shortcut. http://nircmd.nirsoft.net/shortcut.html

share|improve this answer
2  
I recomend almost everything from NirSoft, it's the ultimate geek toolset –  That Brazilian Guy Sep 30 '13 at 23:29

How about using mklink command ? C:\Windows\System32>mklink Creates a symbolic link.

MKLINK [[/D] | [/H] | [/J]] Link Target

    /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.
share|improve this answer
1  
Good idea, but symlinks appear to behave a bit differently than shortcuts. If I create a shortcut to a Visual Studio solution, it opens all the relatively-pathed-projects correctly. However, if I open the same solution via a symlink, the working directory is that of the path in which the symlink resides, not the path to which it refers. –  Walter Stabosz Apr 25 at 16:54

I know this is old, but I built a batch ui that does the same as above, but allows for user input and you can set shortcut file, icon and name.

@echo off
echo.
echo  "Type or drag and drop the file you would like a desktop shortcut for below."
echo. 
set /p FileLoc=" Location of target file: "
cls
echo.
echo  "Type or drag and drop an icon for your shortcut below. Only .ico or a "
echo  "specific dll resource."
echo.
set /p IconLoc=" Location if icon: "
cls
echo.
set /p lnkName=" Shortcut Name: "
cls
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs
echo sLinkFile = "%HOMEDRIVE%%HOMEPATH%\Desktop\%lnkName%.lnk" >> CreateShortcut.vbs
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs
echo oLink.TargetPath = "%FileLoc%" >> CreateShortcut.vbs
echo oLink.IconLocation = "%IconLoc%" >> CreateShortcut.vbs
echo oLink.Save >> CreateShortcut.vbs
cscript CreateShortcut.vbs
del CreateShortcut.vbs

and one that you can run from command line (passing arguments as create_shortcut.cmd fileLocation shortcutIcon shortcutName) would look like this:

@echo off
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs
echo sLinkFile = "%HOMEDRIVE%%HOMEPATH%\Desktop\%3.lnk" >> CreateShortcut.vbs
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs
echo oLink.TargetPath = "%1" >> CreateShortcut.vbs
echo oLink.IconLocation = "%2" >> CreateShortcut.vbs
echo oLink.Save >> CreateShortcut.vbs
cscript CreateShortcut.vbs
del CreateShortcut.vbs

Unfortunately with this method the shortcut name can't contain spaces as it will just negate the second word. If someone else knows how to do this please help me out.

share|improve this answer

Here's a similar solution using powershell (I know, you can probably re-write your whole batch file in PS, but if you just want to 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()"

You may have to explicity specify the path to PS in your file, but it should work. There are some additional attributes you can mangle through this object, too:

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} 
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.