如何在Windows中通过命令行创建快捷方式?

Mas*_*lor 39 windows cmd batch-file shortcut windows-8

我希望我的.bat脚本(test.bat)创建一个自己的快捷方式,以便我可以将它复制到我的Windows 8 Startup文件夹.

我写了这行代码来复制文件,但我还没有找到创建所述快捷方式的方法,因为你可以看到它只复制脚本.

xcopy "C:\Users\Gabriel\Desktop\test.bat" "C:\Users\Gabriel\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"
Run Code Online (Sandbox Code Playgroud)

你能帮我吗?

roj*_*ojo 50

您可以使用PowerShell命令.在你的批处理脚本坚持这一点,它会创建一个快捷方式%~f0%userprofile%\Start Menu\Programs\Startup:

powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%userprofile%\Start Menu\Programs\Startup\%~n0.lnk');$s.TargetPath='%~f0';$s.Save()"
Run Code Online (Sandbox Code Playgroud)

如果您不想使用PowerShell,可以使用它mklink来创建符号链接.句法:

mklink saveShortcutAs targetOfShortcut
Run Code Online (Sandbox Code Playgroud)

请参阅mklink /?控制台窗口中的完整语法,以及此网页以获取更多信息.

在批处理脚本中,执行:

mklink "%userprofile%\Start Menu\Programs\Startup\%~nx0" "%~f0"
Run Code Online (Sandbox Code Playgroud)

创建的快捷方式不是传统的.lnk文件,但它应该工作相同.请注意,只有.bat文件与启动文件夹在同一驱动器上运行时,才能使用此选项.此外,显然需要管理员权限才能创建符号链接.

  • 是的,但是如果还没有为当前的Windows会话做好准备,那么powershell会导致第二次暂停.您的shortcutJS.bat解决方案应该更快. (2认同)
  • 使用组策略编辑器,您可以根据[本页](http://ss64.com/nt/mklink.html)修改“配置\Windows设置\安全设置\本地策略\用户权限分配”。还有一种方法可以使用 [VB 脚本块](https://sites.google.com/site/eneerge/home/BatchGotAdmin) 让脚本提示 UAC。老实说,我认为 PowerShell 命令或 npocmaka 的快捷方式JS.bat 解决方案将带来最佳的用户体验。 (2认同)
  • 文件系统符号链接适用于通过“ShellExecuteEx”运行/打开的文件或通过“CreateProcess”硬编码运行“%ComSpec%”命令解释器的 bat/cmd 脚本。但它不适用于查找与应用程序目录相关的资源的 .exe(特别是 PE 可执行文件,无论扩展名如何)。因此,除非链接是在同一目录中创建的(例如“prog.2.0.exe”=>“prog.exe”),否则 .lnk 快捷方式通常是更好的解决方案。 (2认同)

npo*_*aka 16

无法使用纯批处理.检查shortcutJS.bat - 它是一个jscript/bat混合,应该与.bat扩展名一起使用:

call shortcutJS.bat -linkfile "%~n0.lnk" -target  "%~f0" -linkarguments "some arguments"
Run Code Online (Sandbox Code Playgroud)

有了-help你可以检查其他选项(可以设置图标,管理权限等)

  • 很好,效果很好。我认为这比mklink方法更好。我使用shortcutJs.bat为.pyw文件创建快捷方式,该快捷方式的工作原理与手动创建的完全相同。但是,当双击mklink创建的链接时,它无法自动找到pythonw.exe来执行.pyw文件。 (2认同)

小智 6

Rohit Sahu的回答在Windows 10中对我最有效.TowerShell解决方案已经运行,但没有出现快捷方式.JScript解决方案给了我语法错误.我没有尝试mklink,因为我不想搞乱权限.

我希望快捷方式显示在桌面上.但我还需要设置图标,描述和工作目录.请注意,MyApp48.bmp是一个48x48像素的图像.这是我的Rohit解决方案:

@echo off
cd c:\MyApp
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs
echo sLinkFile = "%userprofile%\Desktop\MyApp.lnk" >> CreateShortcut.vbs
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs
echo oLink.TargetPath = "C:\MyApp\MyApp.bat" >> CreateShortcut.vbs
echo oLink.WorkingDirectory = "C:\MyApp" >> CreateShortcut.vbs
echo oLink.Description = "My Application" >> CreateShortcut.vbs
echo oLink.IconLocation = "C:\MyApp\MyApp48.bmp" >> CreateShortcut.vbs
echo oLink.Save >> CreateShortcut.vbs
cscript CreateShortcut.vbs
del CreateShortcut.vbs
Run Code Online (Sandbox Code Playgroud)

  • 但是谢谢你的回答!可能会帮助来这里寻找解决方案的其他人。 (2认同)

小智 6

Nirsoft 的 NirCMD 也可以从命令行创建快捷方式。(以及一堆其他功能。)这里免费提供:

http://www.nirsoft.net/utils/nircmd.html

完整说明在这里: http: //www.nirsoft.net/utils/nircmd2.html#using (向下滚动到“快捷方式”部分。)

是的,使用 nircmd 确实意味着您正在使用另一个第 3 方 .exe,但它可以执行(大多数)上述解决方案中没有的一些功能(例如,在具有多个图标的 dll 中选择一个图标 #、分配一个热键,并将快捷方式目标设置为最小化或最大化)。

虽然上面的 Shortcutjs.bat 解决方案似乎也可以完成大部分工作,但您需要深入挖掘才能找到如何正确分配这些设置。Nircmd 可能更简单。


Roh*_*ahu 5

最好的方法是运行此批处理文件.打开记事本并输入: -

@echo off
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs
echo sLinkFile = "GIVETHEPATHOFLINK.lnk" >> CreateShortcut.vbs
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs
echo oLink.TargetPath = "GIVETHEPATHOFTARGETFILEYOUWANTTHESHORTCUT" >> CreateShortcut.vbs
echo oLink.Save >> CreateShortcut.vbs
cscript CreateShortcut.vbs
del CreateShortcut.vbs
Run Code Online (Sandbox Code Playgroud)

保存为filename.bat(保存选择所有文件类型时要小心)在win XP中运行良好.