anwarma
anwarma

Reputation: 2105

Creating a shortcut for a exe using a batch file

I know a topic already exists like that but I do not want to use a VB script.

I would hope you can create a shortcut using a command line in DOS.

Please post some example that would be great.

Thanks!

AA

Upvotes: 3

Views: 13814

Answers (5)

mivk
mivk

Reputation: 14999

It can now be done with Powershell, which arguably sucks somewhat less than VBscript. And powershell can be called from a .bat / .cmd file:

powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%userprofile%\Desktop\mylink.lnk'); $s.TargetPath='C:\Path\to\your.exe'; $s.Save()"

See also here for another example: https://ss64.com/nt/shortcut.html#e

See also

Upvotes: 2

Chris S
Chris S

Reputation: 785

Creating a shortcut in the .lnk format is basically impossible from a batch file without calling an external program of some kind. The file spec can be found here, and a quick glace will explain.

Creating a .url format shortcut is quite easy as the format is a simple text file. The spec can be found here. This format has a few disadvantages, but may accomplish your goal.

Upvotes: 1

ghostdog74
ghostdog74

Reputation: 342619

you can get shortcut.exe from the resource kit.

Upvotes: 0

Hamish Grubijan
Hamish Grubijan

Reputation: 10830

mklink /D c:\vim "C:\Program Files (x86)\Vim"

More Info Here

And Cygwin's ln - s

http://en.wikipedia.org/wiki/Symbolic_link#Cygwin_symbolic_links

Upvotes: 2

John Knoeller
John Knoeller

Reputation: 34158

You can't create a shortcut in a .bat file without invoking an external program.

However, every version of Windows since Win2k has a built in scripting language called Windows Script Host

Here is a small WSH script that I wrote a few years ago that can be called from a .bat file, just save this text as shortcut.wsf, it contains useage information in the script.

<package>
 <job id="MakeShortcut">
  <runtime>
   <description>Create a shortcut (.lnk) file.</description>
   <named
     name = "Target"
     helpstring = "the target script"
     type = "string"
     required = "true"
   />
   <named
     name = "Args"
     helpstring = "arguments to pass to the script"
     type = "string"
     required = "false"
   />
   <unnamed
     name = "basename"
     helpstring = "basename of the lnk file to create"
     type = "string"
     required = "false"
   />
  </runtime>

  <script language="JScript">

   if ( ! WScript.Arguments.Named.Exists("Target"))
   {
      WScript.Arguments.ShowUsage();
      WScript.Quit(2);
   }

   target = WScript.Arguments.Named.Item("Target");
   WScript.Echo("target " + target);
   args   = WScript.Arguments.Named.Item("Args");
   WScript.Echo("args " + args);
   base = WScript.Arguments.Unnamed.Item(0);
   WScript.Echo("base " + base);

   fso   = WScript.CreateObject("Scripting.FileSystemObject");
   //path  = fso.GetParentFolderName(WScript.ScriptFullName);
   path  = fso.GetAbsolutePathName(".");
   WScript.Echo("path = " + path);
   Shell = WScript.CreateObject("WScript.Shell");

   short = fso.BuildPath(path,base);
   if ( ! fso.GetExtensionName(base))
      short = short + ".lnk";

   link  = Shell.CreateShortcut(short);
   link.TargetPath   = fso.BuildPath(path, target);
   if (args != null && args != "")
      link.Arguments = args;
   else
      link.Arguments = base;
   //link.Description = "Sound Forge script link";
   //link.HotKey = "ALT+CTRL+F";
   //link.IconLocation = fso.BuildPath(path, target) + ", 2";
   //link.WindowStyle = "1"
   //link.WorkingDirectory = path;
   link.Save();

  </script>
 </job>
</package>

run it without any arguments to get useage

c:\> shortcut.wsf
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

Create a shortcut (.lnk) file.
Usage: shortcut.wsf /Target:value [/Args:value] [basename]

Options:

Target   : the target script
Args     : arguments to pass to the script
basename : basename of the lnk file to create

Upvotes: 3

Related Questions