Intenta publicar el código con las rutas reales sin censurar, yo creo que debe ser un simple problema de sintaxis, que te falle en un S.O. a mi me sugiere que la ruta cambia, y como hay algo incorrecto en la ruta pues... falla. Pero vamos, es solo una hipótesis, sin testearlo podría equivocarme.
De todas formas, examinando detenidamente el código, todos los CD son innecesarios, y estás utlizando la sintaxis incorrecta para el comando Start, si no especificas el primer parámetro de dicho comando, tenderá a dar error según como lo escribas, y aparte tampoco parece que necesites usar el parámetro /D.
Ten presente que algunos comandos (como el Start) tienen ligeros cambios/bugfixes de una versión a otra con respecto a la sintaxis que aceptan, lo que en Win7 te funciona bien en XP te podría dar error de sintaxis por que si en el comando Start, pero bueno, eso es solo si se siguen malas prácticas al escribir la sintaxis, con este código eso no debería pasar.
Prueba el siguiente código:
Saludos
De todas formas, examinando detenidamente el código, todos los CD son innecesarios, y estás utlizando la sintaxis incorrecta para el comando Start, si no especificas el primer parámetro de dicho comando, tenderá a dar error según como lo escribas, y aparte tampoco parece que necesites usar el parámetro /D.
Ten presente que algunos comandos (como el Start) tienen ligeros cambios/bugfixes de una versión a otra con respecto a la sintaxis que aceptan, lo que en Win7 te funciona bien en XP te podría dar error de sintaxis por que si en el comando Start, pero bueno, eso es solo si se siguen malas prácticas al escribir la sintaxis, con este código eso no debería pasar.
Prueba el siguiente código:
Código (dos) [Seleccionar]
@Echo OFF & Title titulo
:: Determine Windows Version.
(ver.exe | findstr.exe "5\.0\.")1>Nul && (Call :Win2k)
(ver.exe | findstr.exe "5\.1\.")1>Nul && (Call :WinXP)
(ver.exe | findstr.exe "5\.2\.")1>Nul && (Call :Win2003)
(ver.exe | findstr.exe "6\.0\.")1>Nul && (Call :WinVISTA)
(ver.exe | findstr.exe "6\.1\.")1>Nul && (Call :Win7)
Pause&Exit
:Win2k
GoTo :EOF
:WinXP
Set "filepath=.\RUTA\xxxxx.exe"
If Exist "%filepath%" (Start "" "%filepath%")
GoTo :EOF
:Win2003
GoTo :EOF
:WinVISTA
GoTo :EOF
:Win7
Set "filepath1=%UserProfile%\Desktop\xxxx.lnk"
Set "filepath2=%ProgramFiles(x86)%\xxxxx\xxxxxx\xxxx.exe" & REM Si vas a correr esto en algún Windows 7 de 32-Bits entonces no uses la variable de entorno.
If Exist "%filepath1%" (Start "" "%filepath1%")
If Exist "%filepath2%" (Start "" "%filepath2%")
GoTo :EOF
Saludos