.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
,如果您愿意的话。) 根据您的评论,我现在包含一个额外的 属性,因为快捷方式没有传播 开始于: 位置。
这是批处理文件的内容:
@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
,如果您愿意的话。) 根据您的评论,我现在包含一个额外的 属性,因为快捷方式没有传播 开始于: 位置。