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

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

  1. path是指定文件的路径
  2. name是快捷方式名

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    @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. 快捷方式创建位置

    1
    2
    3
    4
    5
    
    [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:工作区域

    1
    2
    3
    4
    5
    6
    7
    
    @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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
@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")