批处理创建快捷方式
工作中,用户提到希望软件安装以后在指定的位置创建一个快捷方式(非桌面,开始菜单)。在网上搜了一些解决方案,测试后总结如下:
第一种方法是使用URL的方法,创建一个指向指定文件的链接。实际上你双击快捷方式的时候是打开了一个本地的网址:
- path是指定文件的路径
- 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文件,右键选择记事本打开,可见如下内容:
- URL:快捷方式的程序路径
- IconIndex:快捷方式使用的图标的顺序号
- IconFile:快捷方式图标的位置(此处为系统文件路径,常见系统快捷方式的图标存放位置)
- 快捷方式创建位置
[InternetShortcut]
URL="Program.exe"
IconIndex=99
IconFile=%SystemRoot%\system32\SHELL32.dll
"Program.url"
第二种就是生成lNK类型的文件了,这种才是正统的单机版快捷方式:
- WshShell.CreateShortcut(“Program.lnk”):快捷方式文件路径
- MyLink.TargetPath:目标文件路径
- 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")