如何在 Windows 中通过命令行创建快捷方式?
How do I create a shortcut via command-line in Windows?
我想让我的 .bat 脚本 (test.bat) 创建一个自身的快捷方式,以便我可以将它复制到我的 windows 8 启动文件夹。
我写了这行代码来复制文件,但我还没有找到创建上述快捷方式的方法,正如您所看到的,它只复制脚本。
xcopy "C:\Users\Gabriel\Desktop\test.bat" "C:\Users\Gabriel\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"
你能帮帮我吗?
无法使用纯 batch.Check 和 shortcutJS.bat - 它是 jscript/bat
混合体,应与 .bat
扩展一起使用:
call shortcutJS.bat -linkfile "%~n0.lnk" -target "%~f0" -linkarguments "some arguments"
使用-help
你可以检查其他选项(你可以设置图标,管理员权限等)
您可以使用 PowerShell 命令。将其粘贴到您的批处理脚本中,它将在 %userprofile%\Start Menu\Programs\Startup
:
中创建 %~f0
的快捷方式
powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%userprofile%\Start Menu\Programs\Startup\%~n0.lnk');$s.TargetPath='%~f0';$s.Save()"
如果您不想使用 PowerShell,您可以使用 mklink
来创建一个符号 link。语法:
mklink saveShortcutAs targetOfShortcut
有关完整语法,请参阅控制台 mklink /?
window,有关详细信息,请参阅 this web page。
在您的批处理脚本中,执行:
mklink "%userprofile%\Start Menu\Programs\Startup\%~nx0" "%~f0"
创建的快捷方式不是传统的 .lnk 文件,但它应该可以正常工作。请注意,只有当 .bat 文件 运行 来自与您的启动文件夹相同的驱动器时,这才有效。此外,显然需要管理员权限才能创建符号 links.
我提供了一个小型混合脚本 [BAT/VBS] 来创建桌面快捷方式。
您当然可以根据自己的目的对其进行修改。
@echo off
mode con cols=87 lines=5 & color 9B
Title Shortcut Creator for your batch and applications files by Hackoo 2015
Set MyFile=%~f0
Set ShorcutName=HackooTest
(
echo Call Shortcut("%MyFile%","%ShorcutName%"^)
echo ^'**********************************************************************************************^)
echo Sub Shortcut(ApplicationPath,Nom^)
echo Dim objShell,DesktopPath,objShortCut,MyTab
echo Set objShell = CreateObject("WScript.Shell"^)
echo MyTab = Split(ApplicationPath,"\"^)
echo If Nom = "" Then
echo Nom = MyTab(UBound(MyTab^)^)
echo End if
echo DesktopPath = objShell.SpecialFolders("Desktop"^)
echo Set objShortCut = objShell.CreateShortcut(DesktopPath ^& "\" ^& Nom ^& ".lnk"^)
echo objShortCut.TargetPath = Dblquote(ApplicationPath^)
echo ObjShortCut.IconLocation = "Winver.exe,0"
echo objShortCut.Save
echo End Sub
echo ^'**********************************************************************************************
echo ^'Fonction pour ajouter les doubles quotes dans une variable
echo Function DblQuote(Str^)
echo DblQuote = Chr(34^) ^& Str ^& Chr(34^)
echo End Function
echo ^'**********************************************************************************************
) > Shortcutme.vbs
Start /Wait Shortcutme.vbs
Del Shortcutme.vbs
::***************************************Main Batch*******************************************
cls
echo Done and your main batch goes here !
echo i am a test
Pause > Nul
::********************************************************************************************
最好的方法是运行这个批处理文件。
打开记事本并输入:-
@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
另存为filename.bat(保存select所有文件类型时要小心)
在 Win XP 中运行良好。
Rohit Sahu 的答案在 Windows 10 中最适合我。PowerShell 解决方案 运行,但没有出现快捷方式。 JScript 解决方案给了我语法错误。我没有尝试 mklink,因为我不想弄乱权限。
我希望快捷方式出现在桌面上。
但我还需要设置图标、描述和工作目录。
请注意,MyApp48.bmp 是一个 48x48 像素的图像。
这是我的 mod 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
link.vbs
set fs = CreateObject("Scripting.FileSystemObject")
set ws = WScript.CreateObject("WScript.Shell")
set arg = Wscript.Arguments
linkFile = arg(0)
set link = ws.CreateShortcut(linkFile)
link.TargetPath = fs.BuildPath(ws.CurrentDirectory, arg(1))
link.Save
命令
C:\dir>link.vbs ..\shortcut.txt.lnk target.txt
Nirsoft 的 NirCMD 也可以从命令行创建快捷方式。 (连同一堆其他功能。)在这里免费提供:
http://www.nirsoft.net/utils/nircmd.html
完整说明在这里:
http://www.nirsoft.net/utils/nircmd2.html#using(向下滚动到 "shortcut" 部分。)
是的,使用 nircmd 确实意味着您正在使用另一个第 3 方 .exe,但它可以执行上述(大部分)解决方案中没有的一些功能(例如,在具有多个图标的 dll 中选择一个图标 #,分配一个热键,并将快捷方式目标设置为最小化或最大化)。
虽然上面的 shortcutjs.bat 解决方案似乎也可以完成大部分工作,但您需要深入挖掘才能找到如何正确分配这些设置的方法。 Nircmd 可能更简单。
我想提出这里没有提到的不同解决方案,它使用 .URL
个文件:
set SHRT_LOCA=%userprofile%\Desktop\new_shortcut2.url
set SHRT_DEST=C:\Windows\write.exe
echo [InternetShortcut]> %SHRT_LOCA%
echo URL=file:///%SHRT_DEST%>> %SHRT_LOCA%
echo IconFile=%SHRT_DEST%>> %SHRT_LOCA%
echo IconIndex=^0>> %SHRT_LOCA%
备注:
- 默认情况下
.url
文件用于打开网页,但它们对于任何正确构造的 URI 都可以正常工作
- Microsoft Windows 不显示
.url
文件扩展名,即使 “隐藏已知文件类型的扩展名” 选项在 Windows 资源管理器中也是如此已禁用
IconFile
和 IconIndex
是可选的
- 作为参考,您可以查看 Edward BlakeAn Unofficial Guide to the URL File Format
我创建了一个 VB 脚本,并从命令行或 Java 进程 运行 它。
我还尝试在创建快捷方式时捕获错误,以便更好地处理错误。
Set oWS = WScript.CreateObject("WScript.Shell")
shortcutLocation = Wscript.Arguments(0)
'error handle shortcut creation
On Error Resume Next
Set oLink = oWS.CreateShortcut(shortcutLocation)
If Err Then WScript.Quit Err.Number
'error handle setting shortcut target
On Error Resume Next
oLink.TargetPath = Wscript.Arguments(1)
If Err Then WScript.Quit Err.Number
'error handle setting start in property
On Error Resume Next
oLink.WorkingDirectory = Wscript.Arguments(2)
If Err Then WScript.Quit Err.Number
'error handle saving shortcut
On Error Resume Next
oLink.Save
If Err Then WScript.Quit Err.Number
我 运行 带有以下命令的脚本:
cscript /b script.vbs shortcutFuturePath targetPath startInProperty
在某些情况下,即使不设置 'Start in' 属性 也可以让它工作。
为了为 warp-cli.exe
创建快捷方式,我基于 rojo 的 Powershell 命令并添加了 WorkingDirectory
、Arguments
、IconLocation
并最小化了 WindowStyle
属性.
powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%userprofile%\Start Menu\Programs\Startup\CWarp_DoH.lnk');$s.TargetPath='E:\Program\CloudflareWARP\warp-cli.exe';$s.Arguments='connect';$s.IconLocation='E:\Program\CloudflareWARP\Cloudflare WARP.exe';$s.WorkingDirectory='E:\Program\CloudflareWARP';$s.WindowStyle=7;$s.Save()"
CreateShortcut 的其他 PS 属性:
根据 Rohit 的回答,我创建了这个接受输入参数的批处理脚本:AppPath
、AppName
、AppExtension
和 ShortcutDestinationPath
。
MakeShortcut.bat:
@echo off
set AppPath=%~1
set AppName=%~2
set AppExtension=%~3
set ShortcutDestinationPath=%~4
cd %AppPath%
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs
echo sLinkFile = "%ShortcutDestinationPath%\%AppName%.lnk" >> CreateShortcut.vbs
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs
echo oLink.TargetPath = "%AppPath%\%AppName%.%AppExtension%" >> CreateShortcut.vbs
echo oLink.WorkingDirectory = "%AppPath%" >> CreateShortcut.vbs
echo oLink.Description = "%AppName%" >> CreateShortcut.vbs
echo oLink.IconLocation = "%AppPath%\%AppName%.bmp" >> CreateShortcut.vbs
echo oLink.Save >> CreateShortcut.vbs
cscript CreateShortcut.vbs
rem del CreateShortcut.vbs
在文件夹 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
中创建指向 C:\Apps\MyApp.exe
的快捷方式的示例用法:
MakeShortcut.bat "C:\Apps" "MyApp" "exe" "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"
我想让我的 .bat 脚本 (test.bat) 创建一个自身的快捷方式,以便我可以将它复制到我的 windows 8 启动文件夹。
我写了这行代码来复制文件,但我还没有找到创建上述快捷方式的方法,正如您所看到的,它只复制脚本。
xcopy "C:\Users\Gabriel\Desktop\test.bat" "C:\Users\Gabriel\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"
你能帮帮我吗?
无法使用纯 batch.Check 和 shortcutJS.bat - 它是 jscript/bat
混合体,应与 .bat
扩展一起使用:
call shortcutJS.bat -linkfile "%~n0.lnk" -target "%~f0" -linkarguments "some arguments"
使用-help
你可以检查其他选项(你可以设置图标,管理员权限等)
您可以使用 PowerShell 命令。将其粘贴到您的批处理脚本中,它将在 %userprofile%\Start Menu\Programs\Startup
:
%~f0
的快捷方式
powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%userprofile%\Start Menu\Programs\Startup\%~n0.lnk');$s.TargetPath='%~f0';$s.Save()"
如果您不想使用 PowerShell,您可以使用 mklink
来创建一个符号 link。语法:
mklink saveShortcutAs targetOfShortcut
有关完整语法,请参阅控制台 mklink /?
window,有关详细信息,请参阅 this web page。
在您的批处理脚本中,执行:
mklink "%userprofile%\Start Menu\Programs\Startup\%~nx0" "%~f0"
创建的快捷方式不是传统的 .lnk 文件,但它应该可以正常工作。请注意,只有当 .bat 文件 运行 来自与您的启动文件夹相同的驱动器时,这才有效。此外,显然需要管理员权限才能创建符号 links.
我提供了一个小型混合脚本 [BAT/VBS] 来创建桌面快捷方式。 您当然可以根据自己的目的对其进行修改。
@echo off
mode con cols=87 lines=5 & color 9B
Title Shortcut Creator for your batch and applications files by Hackoo 2015
Set MyFile=%~f0
Set ShorcutName=HackooTest
(
echo Call Shortcut("%MyFile%","%ShorcutName%"^)
echo ^'**********************************************************************************************^)
echo Sub Shortcut(ApplicationPath,Nom^)
echo Dim objShell,DesktopPath,objShortCut,MyTab
echo Set objShell = CreateObject("WScript.Shell"^)
echo MyTab = Split(ApplicationPath,"\"^)
echo If Nom = "" Then
echo Nom = MyTab(UBound(MyTab^)^)
echo End if
echo DesktopPath = objShell.SpecialFolders("Desktop"^)
echo Set objShortCut = objShell.CreateShortcut(DesktopPath ^& "\" ^& Nom ^& ".lnk"^)
echo objShortCut.TargetPath = Dblquote(ApplicationPath^)
echo ObjShortCut.IconLocation = "Winver.exe,0"
echo objShortCut.Save
echo End Sub
echo ^'**********************************************************************************************
echo ^'Fonction pour ajouter les doubles quotes dans une variable
echo Function DblQuote(Str^)
echo DblQuote = Chr(34^) ^& Str ^& Chr(34^)
echo End Function
echo ^'**********************************************************************************************
) > Shortcutme.vbs
Start /Wait Shortcutme.vbs
Del Shortcutme.vbs
::***************************************Main Batch*******************************************
cls
echo Done and your main batch goes here !
echo i am a test
Pause > Nul
::********************************************************************************************
最好的方法是运行这个批处理文件。 打开记事本并输入:-
@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
另存为filename.bat(保存select所有文件类型时要小心) 在 Win XP 中运行良好。
Rohit Sahu 的答案在 Windows 10 中最适合我。PowerShell 解决方案 运行,但没有出现快捷方式。 JScript 解决方案给了我语法错误。我没有尝试 mklink,因为我不想弄乱权限。
我希望快捷方式出现在桌面上。 但我还需要设置图标、描述和工作目录。 请注意,MyApp48.bmp 是一个 48x48 像素的图像。 这是我的 mod 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
link.vbs
set fs = CreateObject("Scripting.FileSystemObject")
set ws = WScript.CreateObject("WScript.Shell")
set arg = Wscript.Arguments
linkFile = arg(0)
set link = ws.CreateShortcut(linkFile)
link.TargetPath = fs.BuildPath(ws.CurrentDirectory, arg(1))
link.Save
命令
C:\dir>link.vbs ..\shortcut.txt.lnk target.txt
Nirsoft 的 NirCMD 也可以从命令行创建快捷方式。 (连同一堆其他功能。)在这里免费提供:
http://www.nirsoft.net/utils/nircmd.html
完整说明在这里: http://www.nirsoft.net/utils/nircmd2.html#using(向下滚动到 "shortcut" 部分。)
是的,使用 nircmd 确实意味着您正在使用另一个第 3 方 .exe,但它可以执行上述(大部分)解决方案中没有的一些功能(例如,在具有多个图标的 dll 中选择一个图标 #,分配一个热键,并将快捷方式目标设置为最小化或最大化)。
虽然上面的 shortcutjs.bat 解决方案似乎也可以完成大部分工作,但您需要深入挖掘才能找到如何正确分配这些设置的方法。 Nircmd 可能更简单。
我想提出这里没有提到的不同解决方案,它使用 .URL
个文件:
set SHRT_LOCA=%userprofile%\Desktop\new_shortcut2.url
set SHRT_DEST=C:\Windows\write.exe
echo [InternetShortcut]> %SHRT_LOCA%
echo URL=file:///%SHRT_DEST%>> %SHRT_LOCA%
echo IconFile=%SHRT_DEST%>> %SHRT_LOCA%
echo IconIndex=^0>> %SHRT_LOCA%
备注:
- 默认情况下
.url
文件用于打开网页,但它们对于任何正确构造的 URI 都可以正常工作 - Microsoft Windows 不显示
.url
文件扩展名,即使 “隐藏已知文件类型的扩展名” 选项在 Windows 资源管理器中也是如此已禁用 IconFile
和IconIndex
是可选的- 作为参考,您可以查看 Edward BlakeAn Unofficial Guide to the URL File Format
我创建了一个 VB 脚本,并从命令行或 Java 进程 运行 它。 我还尝试在创建快捷方式时捕获错误,以便更好地处理错误。
Set oWS = WScript.CreateObject("WScript.Shell")
shortcutLocation = Wscript.Arguments(0)
'error handle shortcut creation
On Error Resume Next
Set oLink = oWS.CreateShortcut(shortcutLocation)
If Err Then WScript.Quit Err.Number
'error handle setting shortcut target
On Error Resume Next
oLink.TargetPath = Wscript.Arguments(1)
If Err Then WScript.Quit Err.Number
'error handle setting start in property
On Error Resume Next
oLink.WorkingDirectory = Wscript.Arguments(2)
If Err Then WScript.Quit Err.Number
'error handle saving shortcut
On Error Resume Next
oLink.Save
If Err Then WScript.Quit Err.Number
我 运行 带有以下命令的脚本:
cscript /b script.vbs shortcutFuturePath targetPath startInProperty
在某些情况下,即使不设置 'Start in' 属性 也可以让它工作。
为了为 warp-cli.exe
创建快捷方式,我基于 rojo 的 Powershell 命令并添加了 WorkingDirectory
、Arguments
、IconLocation
并最小化了 WindowStyle
属性.
powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%userprofile%\Start Menu\Programs\Startup\CWarp_DoH.lnk');$s.TargetPath='E:\Program\CloudflareWARP\warp-cli.exe';$s.Arguments='connect';$s.IconLocation='E:\Program\CloudflareWARP\Cloudflare WARP.exe';$s.WorkingDirectory='E:\Program\CloudflareWARP';$s.WindowStyle=7;$s.Save()"
CreateShortcut 的其他 PS 属性:
根据 Rohit 的回答,我创建了这个接受输入参数的批处理脚本:AppPath
、AppName
、AppExtension
和 ShortcutDestinationPath
。
MakeShortcut.bat:
@echo off
set AppPath=%~1
set AppName=%~2
set AppExtension=%~3
set ShortcutDestinationPath=%~4
cd %AppPath%
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs
echo sLinkFile = "%ShortcutDestinationPath%\%AppName%.lnk" >> CreateShortcut.vbs
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs
echo oLink.TargetPath = "%AppPath%\%AppName%.%AppExtension%" >> CreateShortcut.vbs
echo oLink.WorkingDirectory = "%AppPath%" >> CreateShortcut.vbs
echo oLink.Description = "%AppName%" >> CreateShortcut.vbs
echo oLink.IconLocation = "%AppPath%\%AppName%.bmp" >> CreateShortcut.vbs
echo oLink.Save >> CreateShortcut.vbs
cscript CreateShortcut.vbs
rem del CreateShortcut.vbs
在文件夹 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
中创建指向 C:\Apps\MyApp.exe
的快捷方式的示例用法:
MakeShortcut.bat "C:\Apps" "MyApp" "exe" "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"