El acceso directo a .exe creado por el archivo .bat no funciona

CorePress2024-01-25  358

este es el contenido del archivo por lotes:

@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%

Cuando ejecuto esto, se crea un acceso directo correcto al game.exe pero cuando inicio el acceso directo aparece el siguiente error:

error de acceso directo

El game.exe real funciona perfectamente bien, incluso cuando creo manualmente un acceso directo funciona, no sé por qué el acceso directo creado por el archivo por lotes no funciona. ¿Cómo soluciono esto?

editar: no sé si importaría, pero la carpeta de archivos Block Dodger también contiene otros archivos que el .exe necesita ejecutar, no sé si todos estos deberían incluirse en el archivo por lotes.



------------------------------------

Yo haríaProbablemente lo haya hecho así, asegurándose de que la ruta de destino esté entre comillas dobles, para proteger los caracteres de espacio:

@(  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"

Aparte de las comillas dobles de la ruta de destino, el único cambio real es que le estoy pidiendo al VBScript que se autodestruya, en lugar de eliminarlo después con @Del "script.vbs". (Puede restablecer eso como una nueva última línea y eliminar Echo Set oFS = CreateObject("Scripting.FileSystemObject"^) y Echo oFS.DeleteFile WScript.ScriptFullName, si lo prefiere). Según su comentario, he ahora se incluye una propiedad adicional, porque el acceso directo no tenía la ubicación Iniciar en: propagada.

2

Todavía no funciona, eso podría deberse a que en la carpeta de archivos de Block Dodger también hay muchos archivos .pyd y .dll que Block Dodger.exe necesita ejecutar. ¿Deberían incluirse todos estos archivos en el archivo por lotes y, de ser así, cómo lo haría?

- Bjorn

28 de marzo de 2021 a las 11:51

Eso no es culpa del código anterior @Bjorn, simplemente falta una propiedad que no proporcionaste en tu pregunta. Ahora agregué esa propiedad faltante a mi respuesta abBuen día, vuelve a intentarlo.

Compo

28/03/2021 a las 12:01



------------------------------------

Terminé arreglándolo de otra manera.

atajo improvisado:

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

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare