开发者

Creating a shortcut for a exe using a batch file

开发者 https://www.devze.com 2022-12-19 19:27 出处:网络
I know a topic already exists l开发者_高级运维ike 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.

I know a topic already exists l开发者_高级运维ike 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


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


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


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.


you can get shortcut.exe from the resource kit.


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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号