【问题标题】:creating a shortcut for a exe from a batch file从批处理文件创建 exe 的快捷方式
【发布时间】:2008-12-06 08:59:56
【问题描述】:

如何从批处理文件中为 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"

但它没有用。

link.bat 位于 http://www.robvanderwoude.com/amb_shortcuts.html

【问题讨论】:

  • 请不要假设 Program Files 位于“C:\Program Files”。 (不过,%PROGRAMFILES% 可以工作)。同样,不要假设用户的主目录位于“C:\Documents and Settings\%USERNAME%”(它是 %HOMEDIR%)中。而且Desktop可能不叫Desktop。
  • 是否有可用于在 Windows 7 上创建快捷方式的解决方案?
  • @JayBazuzi 在 Windows 7、8 和 Server 2012 上是 %HomePath%。:)

标签: batch-file


【解决方案1】:

您的链接指向 Windows 95/98 版本,我猜您至少有 Windows 2000 或 XP。你应该试试NT版here。

或者使用可以从命令行调用的小 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

将文件保存为 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" 

也就是说,我敦促您不要使用像“开始菜单”这样的硬编码路径,因为它们在本地化版本的 Windows 中是不同的。修改脚本改为使用special folders。

【讨论】:

  • 如果目标是 exe,我添加了几行来正确设置 WorkingDirectory - 否则,任何期望从它自己的目录启动的 exe 都会失败,通常会出现无意义的错误消息。
  • @Mason:你能发布你的改进吗?真的会帮助我。
  • @aRestless:抱歉,我提交了编辑,但显然被拒绝了。 mod是在objSC.Save之前添加以下内容: If InStr(sTargetPath, ".exe") > 0 Then objSC.WorkingDirectory = Left(sTargetPath, InStrRev(sTargetPath, "\")) End If
  • @aRestless:按照建议,由于 Mason 无法编辑帖子,我更新了脚本以设置工作目录。
【解决方案2】:

这是 PowerShell 真正擅长的事情,因此是避开批处理文件并加入 PowerShell 潮流的一个原因。

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

[Environment]::GetFolderPath("Desktop")

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

New-Object -ComObject WScript.Shell).CreateShortcut( ... )

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

$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()

快捷方式有很多 WScript.Shell 无法操作的设置,例如“以管理员身份运行”选项。这些只能通过 Win32 接口IShellLinkDataList 访问,使用起来确实很痛苦,但可以做到。

【讨论】:

    【解决方案3】:

    使用 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 
    

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

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

    【讨论】:

      【解决方案4】:

      在 XP 上我写了 makeshortcut.vbs

      Set oWS = WScript.CreateObject("WScript.Shell")
      If wscript.arguments.count < 4 then
        WScript.Echo "usage: makeshortcut.vbs shortcutPath targetPath arguments workingDir "
        WScript.Quit
      end If
      shortcutPath = wscript.arguments(0) & ".LNK"
      targetPath = wscript.arguments(1)
      arguments = wscript.arguments(2)
      workingDir = wscript.arguments(3)
      
      WScript.Echo "Creating shortcut " & shortcutPath & " targetPath=" & targetPath & " arguments=" & arguments & " workingDir=" & workingDir
      
      Set oLink = oWS.CreateShortcut(shortcutPath) 
      oLink.TargetPath = targetPath
      oLink.Arguments = arguments
      ' oLink.Description = "MyProgram"
      ' oLink.HotKey = "ALT+CTRL+F"
      ' oLink.IconLocation = "C:\Program Files\MyApp\MyProgram.EXE, 2"
      ' oLink.WindowStyle = "1"
      oLink.WorkingDirectory = workingDir
      oLink.Save
      

      它恰好需要 4 个 args,因此可以通过将后面的 2 个可选来改进它。我只发布因为它回显了它的用法,这可能对某些人有用。我喜欢 WS 使用特殊文件夹和 ExpandEnvironmentStrings 的解决方案

      【讨论】:

        【解决方案5】:

        附加说明:您使用的 link.bat 仅适用于 Windows 95/98:

        此批处理文件仅适用于 Windows 95/98。我会将新台币等价物张贴在 NT 新闻组很快。

        NT 版本改为在http://www.robvanderwoude.com/amb_shortcutsnt.html 发布。如果比 vbscript 更喜欢,您可以尝试使用 .bat 方法。

        【讨论】:

          【解决方案6】:

          替代方法,使用第三方实用程序:

          Creating a Shortcut from the command line (batch file)

          XXMKLINK:

          使用 XXMKLINK,您可以为软件编写批处理文件 由专业安装完成的安装 程式。基本上,XXMKLINK 是一个收集各种 从命令行获取信息并将其打包到快捷方式中。

          xxmklink spath opath 
          
          where 
          
            spath     path of the shortcut (.lnk added as needed)
            opath     path of the object represented by the shortcut
          

          【讨论】:

            【解决方案7】:

            您可以查看shortcutjs.bat:

            ::creates a shortcut that will start the target with minimized window and admin permissions
            shortcutjs.bat -linkfile myscriptMin.lnk -target "%cd%\myscript.bat" -windowstyle 7 -adminpermissions yes
            
            ::creates a shortcut with a hot keys
            shortcutjs.bat -linkfile myscriptHK.lnk -target "%cd%\myscript.bat" -hotkey "ALT+CTRL+P"
            

            您还可以编辑现有快捷方式或仅显示其属性。

            【讨论】:

              【解决方案8】:

              这在 Windows XP ms-dos 上对我有用,我还没有在 Windows 7 上尝试过。这就像在 Linux 中创建符号链接。

              shortcut -T source.exe destination.lnk
              

              【讨论】:

              • @henginy 你试过这个命令了吗?这是使用“Windows Script Host”完成的。
              • 当然可以,但我已经在命令提示符下尝试过了,因为没有另外指定。我也会在 WS Host 中尝试。
              • Windows 95 支持工具和 NT 4 Server Resource Kit 包含一个shortcut.exe 工具。还有一个来自 Optimum X 的免费软件 shortcut.exe。
              【解决方案9】:

              最后我决定编写正确的脚本,因为没有适合我的解决方案 您将需要两个文件本地设置\ 第一个

              createSCUT.bat

              @echo on
              set VBS=createSCUT.vbs 
              set SRC_LNK="shortcut1.lnk"
              set ARG1_APPLCT="C:\Program Files\Google\Chrome\Application\chrome.exe"
              set ARG2_APPARG="--profile-directory=QuteQProfile 25QuteQ"
              set ARG3_WRKDRC="C:\Program Files\Google\Chrome\Application"
              set ARG4_ICOLCT="%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Profile 25\Google Profile.ico"
              cscript %VBS% %SRC_LNK% %ARG1_APPLCT% %ARG2_APPARG% %ARG3_WRKDRC% %ARG4_ICOLCT%
              

              第二个

              创建SCUT.vbs

              Set objWSHShell = WScript.CreateObject("WScript.Shell")
              set objWSHShell = CreateObject("WScript.Shell")
              set objFso = CreateObject("Scripting.FileSystemObject")
              If WScript.arguments.count = 5 then
                  WScript.Echo "usage: makeshortcut.vbs shortcutPath targetPath arguments workingDir IconLocation"
                  sShortcut = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(0))
                  set objSC = objWSHShell.CreateShortcut(sShortcut) 
                  sTargetPath = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(1))
                  sArguments = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(2))
                  sWorkingDirectory = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(3))
                  sIconLocation = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(4))
                  objSC.TargetPath = sTargetPath
                  rem http://www.bigresource.com/VB-simple-replace-function-5bAN30qRDU.html#
                  objSC.Arguments = Replace(sArguments, "QuteQ", Chr(34))
                  rem http://msdn.microsoft.com/en-us/library/f63200h0(v=vs.90).aspx http://msdn.microsoft.com/en-us/library/267k4fw5(v=vs.90).aspx
                  objSC.WorkingDirectory = sWorkingDirectory
                  objSC.Description = "Love Peace Bliss"
                  rem 1 restore 3 max 7 min
                  objSC.WindowStyle = "3"
                  rem objSC.Hotkey = "Ctrl+Alt+e";
                  objSC.IconLocation = sIconLocation
                  objSC.Save
                  WScript.Quit
              end If
              If WScript.arguments.count = 4 then
                  WScript.Echo "usage: makeshortcut.vbs shortcutPath targetPath arguments workingDir "
              
                  sShortcut = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(0))
                  set objSC = objWSHShell.CreateShortcut(sShortcut) 
                  sTargetPath = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(1))
                  sArguments = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(2))
                  sWorkingDirectory = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(3))
                  objSC.TargetPath = sTargetPath
                  objSC.Arguments = Replace(sArguments, "QuteQ", Chr(34))
                  objSC.WorkingDirectory = sWorkingDirectory
                  objSC.Description = "Love Peace Bliss"
                  objSC.WindowStyle = "3"
                  objSC.Save
                  WScript.Quit
              end If
              If WScript.arguments.count = 2 then
                  WScript.Echo "usage: makeshortcut.vbs shortcutPath targetPath"
                  sShortcut = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(0))
                  set objSC = objWSHShell.CreateShortcut(sShortcut) 
                  sTargetPath = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(1))
                  sWorkingDirectory = objFso.GetAbsolutePathName(sShortcut)
                  objSC.TargetPath = sTargetPath
                  objSC.WorkingDirectory = sWorkingDirectory
                  objSC.Save
                  WScript.Quit
              end If
              

              【讨论】:

                猜你喜欢
                • 2011-01-14
                • 2020-10-04
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-11-23
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多