.bat 文件创建的 .exe 快捷方式不起作用

shortcut to .exe created by .bat file doesn't work

这是批处理文件的内容:

@echo off

set SCRIPT="script.vbs"

echo Set oWS = WScript.CreateObject("WScript.Shell") >> %SCRIPT%
echo sLinkFile = "%~dp0Block Dodger.lnk" >> %SCRIPT%
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> %SCRIPT%
echo oLink.TargetPath = "%~dp0Block Dodger files\Block_Dodger.exe" >> %SCRIPT%
echo oLink.Save >> %SCRIPT%

cscript /nologo %SCRIPT%
del %SCRIPT%

当我 运行 这样做时,它确实创建了 game.exe 的正确快捷方式,但是当我启动该快捷方式时,出现以下错误:

shortcut error

实际 game.exe 本身工作得很好,即使我手动创建快捷方式也能正常工作,我不知道为什么批处理文件创建的快捷方式不起作用。 我该如何解决这个问题?

编辑:我不知道这是否重要,但是 Block Dodger 文件文件夹也包含 .exe 需要的其他文件 运行,我不知道这些是否应该全部包含在批处理文件中。

我最终以不同的方式修复了它。

改进的快捷方式:

start /d "%~dp0Block Dodger files" Block_Dodger.exe

我可能会这样做,确保目标路径是双引号,以保护 space 个字符:

@(  Echo Set oWS = WScript.CreateObject("WScript.Shell"^)
    Echo Set oFS = CreateObject("Scripting.FileSystemObject"^)
    Echo sLinkFile = "%~dp0Block Dodger.lnk"
    Echo Set oLink = oWS.CreateShortcut(sLinkFile^)
    Echo oLink.TargetPath = """%~dp0Block Dodger files\Block_Dodger.exe"""
    Echo oLink.WorkingDirectory = "%~dp0Block Dodger files"
    Echo oLink.Save
    Echo oFS.DeleteFile WScript.ScriptFullName) >"script.vbs"
@%SystemRoot%\System32\cscript.exe /NoLogo "script.vbs"

除了双引号目标路径外,唯一真正的变化是我要求 VBScript 自毁,而不是事后用 @Del "script.vbs" 删除它。 (您可以将其恢复为新的最后一行,并删除 Echo Set oFS = CreateObject("Scripting.FileSystemObject"^)Echo oFS.DeleteFile WScript.ScriptFullName,如果您愿意的话。) 根据您的评论,我现在包含一个额外的 属性,因为快捷方式没有传播 开始于: 位置。