从批处理文件创建exe的快捷方式

sun*_*pal 24 batch-file

如何从批处理文件创建exe的快捷方式.

我试过了

call link.bat "c:\program Files\App1\program1.exe" "C:\Documents and Settings\%USERNAME%\Desktop" "C:\Documents and Settings\%USERNAME%\Start Menu\Programs" "Program1 shortcut"
Run Code Online (Sandbox Code Playgroud)

但它没有奏效.

link.bat可以在http://www.robvanderwoude.com/amb_shortcuts.html找到

VVS*_*VVS 22

你的链接指向Windows 95/98版本,我猜你至少有Windows 2000或XP.你应该在这里尝试NT版本.

或者使用一些可以从命令行调用的VBScript:

set objWSHShell = CreateObject("WScript.Shell")
set objFso = CreateObject("Scripting.FileSystemObject")

' command line arguments
' TODO: error checking
sShortcut = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(0))
sTargetPath = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(1))
sWorkingDirectory = objFso.GetAbsolutePathName(sShortcut)

set objSC = objWSHShell.CreateShortcut(sShortcut) 

objSC.TargetPath = sTargetPath
objSC.WorkingDirectory = sWorkingDirectory

objSC.Save
Run Code Online (Sandbox Code Playgroud)

将文件另存为createLink.vbs并像这样调用以获得您最初尝试的内容:

cscript createLink.vbs "C:\Documents and Settings\%USERNAME%\Desktop\Program1 shortcut.lnk" "c:\program Files\App1\program1.exe" 
cscript createLink.vbs "C:\Documents and Settings\%USERNAME%\Start Menu\Programs\Program1 shortcut.lnk" "c:\program Files\App1\program1.exe" 
Run Code Online (Sandbox Code Playgroud)

这就是说我敦促你不要使用像"开始菜单"这样的硬编码路径,因为它们在Windows的本地化版本中是不同的.修改脚本而不是使用特殊文件夹.


Jay*_*uzi 12

这是PowerShell真正擅长的事情,因此是避免批处理文件并使PowerShell成为潮流的理由.

PowerShell可以与.NET通信.例如,您可以像这样获取桌面的位置:

[Environment]::GetFolderPath("Desktop")
Run Code Online (Sandbox Code Playgroud)

PowerShell可以与COM对象通信,包括WScript.Shell可以创建快捷方式的COM对象:

New-Object -ComObject WScript.Shell).CreateShortcut( ... )
Run Code Online (Sandbox Code Playgroud)

所以你的脚本可能看起来像:

$linkPath = Join-Path ([Environment]::GetFolderPath("Desktop")) "MyShortcut.lnk"
$targetPath = Join-Path ([Environment]::GetFolderPath("ProgramFiles")) "MyCompany\MyProgram.exe"
$link = (New-Object -ComObject WScript.Shell).CreateShortcut( $linkpath )
$link.TargetPath = $targetPath
$link.Save()
Run Code Online (Sandbox Code Playgroud)

快捷方式有很多WScript.Shell无法操作的设置,例如"以管理员身份运行"选项.这些只能通过Win32接口访问IShellLinkDataList,这是一个真正的痛苦,但它可以做到.


Jay*_*Jay 9

使用vbscript:

set WshShell = WScript.CreateObject("WScript.Shell" )
strDesktop = WshShell.SpecialFolders("AllUsersDesktop" )
set oShellLink = WshShell.CreateShortcut(strDesktop & "\shortcut name.lnk" )
oShellLink.TargetPath = "c:\application folder\application.exe"
oShellLink.WindowStyle = 1
oShellLink.IconLocation = "c:\application folder\application.ico"
oShellLink.Description = "Shortcut Script"
oShellLink.WorkingDirectory = "c:\application folder"
oShellLink.Save 
Run Code Online (Sandbox Code Playgroud)

参考:http://www.tomshardware.com/forum/52871-45-creating-desktop-shortcuts-command-line

如果做不到这一点,快速谷歌搜索会显示有许多第三方工具可以为应用程序快捷方式创建.lnk文件.我假设您需要坚持在Windows上原生可用的东西吗?VBscript可能是你最好的选择,否则我建议你尝试从你的机器上复制.lnk文件或使用它作为样本来查看快捷方式文件的正确格式.