工作中,用户提到希望软件安装以后在指定的位置创建一个快捷方式(非桌面,开始菜单)。在网上搜了一些解决方案,测试后总结如下:

第一种方法是使用URL的方法,创建一个指向指定文件的链接。实际上你双击快捷方式的时候是打开了一个本地的网址:

  1. path是指定文件的路径
  2. name是快捷方式名
@echo off
set "path=%cd%\Program.exe"
set "name=Program"
set m="%cd%\..\Program.url"
echo [InternetShortcut] >>%m%
echo URL="%path%" >>%m%
echo IconIndex=10 >>%m%
echo IconFile=C:\windows\system32\shell32.dll >>%m%
pause

最终得到一个URL文件,右键选择记事本打开,可见如下内容:

  1. URL:快捷方式的程序路径
  2. IconIndex:快捷方式使用的图标的顺序号
  3. IconFile:快捷方式图标的位置(此处为系统文件路径,常见系统快捷方式的图标存放位置)
  4. 快捷方式创建位置
[InternetShortcut]
URL="Program.exe"
IconIndex=99
IconFile=%SystemRoot%\system32\SHELL32.dll
"Program.url" 

第二种就是生成lNK类型的文件了,这种才是正统的单机版快捷方式:

  1. WshShell.CreateShortcut(“Program.lnk”):快捷方式文件路径
  2. MyLink.TargetPath:目标文件路径
  3. MyLink.WorkingDirectory:工作区域
@ECHO OFF
ECHO Set WshShell = Wscript.CreateObject("Wscript.Shell") >%temp%\tmp.vbs
CMD /c "ECHO ^Set MyLink = WshShell.CreateShortcut("Program.lnk")" >>%temp%\tmp.vbs"
ECHO MyLink.TargetPath = "Program.exe" >>%temp%\tmp.vbs
ECHO MyLink.WorkingDirectory = "%cd%" >>%temp%\tmp.vbs
ECHO MyLink.Save >>%temp%\tmp.vbs
cscript /nologo %temp%\tmp.vbs

还有另一种方法生成LNK:

@echo off
set SrcFile=Program.exe
set LnkFile=Program

call :CreateShort "%SrcFile%" "%LnkFile%"
goto :eof

::Arguments              目标程序参数
::Description            快捷方式备注
::FullName               返回快捷方式完整路径
::Hotkey                 快捷方式快捷键
::IconLocation           快捷方式图标,不设则使用默认图标
::TargetPath             目标
::WindowStyle            窗口启动状态
::WorkingDirectory       起始位置

:CreateShort
mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(""%~2.lnk""):b.TargetPath=""%~1"":b.WorkingDirectory=""%~dp1"":b.Save:close")