Problema al ejecutar bat de inicio en Win XP

Iniciado por NoVaC, 16 Febrero 2016, 20:09 PM

0 Miembros y 2 Visitantes están viendo este tema.

NoVaC

Buenos dias (o noches) a todos,

Os escribo porque, estoy implementando un script de inicio en mi empresa (en batch) con el que pretendo que todo el mundo que inicie con el usuario X se le inicien 2 programas sin necesidad de que toquen nada. Lo he conseguido pero solo en los ordenadores con windows 7. cuando llega a un Pc con windows XP hace caso omiso. menos cuando lo pruebo en local, entonces si funciona... por ello quiero que me digáis  que cosas se os ocurren ya que me estoy volviendo loco.

El codigo es el siguiente.
Código (dos) [Seleccionar]

REM Check Windows Version
ver | findstr /i "5\.0\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_2000
ver | findstr /i "5\.1\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_XP
ver | findstr /i "5\.2\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_2003
ver | findstr /i "6\.0\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_Vista
ver | findstr /i "6\.1\." > nul
IF %ERRORLEVEL% EQU 0 goto ver_Win7
goto warn_and_exit

:ver_Win7
:Run Windows 7 specific commands here
REM echo OS Version: Windows 7 (debug line)
if not exist C:\users\xx\Desktop\xxxx.lnk goto :fin
start C:\users\xx\Desktop\xxxx.lnk
:fin
if not exist "C:\Program Files (x86)\xxxxx\xxxxxx\xxxx.exe" goto :end
start /d "C:\Program Files (x86)\xxxxxx\xxxxx\" xxxx.exe
goto end

:ver_Vista
:Run Windows Vista specific commands here
REM echo OS Version: Windows Vista (debug line)
goto end

:ver_2003
:Run Windows Server 2003 specific commands here
REM echo OS Version: Windows Server 2003 (debug line)
goto end

:ver_XP
:Run Windows XP specific commands here
REM echo OS Version: Windows XP (debug line)
cd \
cd \Archivos de programa\xxxxx\xxxxx\
if not exist xxxxx.exe goto :fin
start xxxxx.exe
:fin
cd \
cd \Archivos de programa\xxxxx\xxxxxx\
if not exist xxxxxx.exe goto :final
start xxxxxx.exe
:final
goto end

:ver_2000
:Run Windows 2000 specific commands here
REM echo OS Version: Windows 2000 (debug line)
goto end

:warn_and_exit
echo Machine OS cannot be determined.

:end  

Este es el código como he dicho todo funciona menos la parte en XP que en local funciona pero como script de inicio no. También se me ha ocurrido que no sea el código si no temas de permisos, o incluso problema con la dirección relativa ya que c:\xxxx no me lo coge por problemas de espacios en la ruta etc.

En fin daros las gracias por vuestra ayuda y perdón al creador del código de detección de windows, que lo cogi de una pagina francesa que no consigo recordar.

Eleкtro

#1
Cita de: NoVaC en 16 Febrero 2016, 20:09 PMc:\xxxx no me lo coge por problemas de espacios en la ruta

Es un problema común con una sencilla solución, encierra la ruta usando comillas dobles:
"..\..\ruta relativa"

Haz eso con todas las rutas (tengan espacios o no, dejarlas sin comillas es una mala práctica) y supongo que ya te debería funcionar, en caso contrario, inicia el script desde la consola (no haciendo doble click en el archivo, sino escribiendo el nombre en la consola) para que puedas comprobar el error que se haya producido, y comentanoslo.

Aparte de lo mencionado, puedes simplificar las rutas conocidas reemplazándolas por las variables de entorno %PROGRAMFILES% y/o %PROGRAMFILES(x86)%,
luego también, puedes mejorar la sintaxis de las condicionales ifs ya que no estás utilizando los símbolos de agrupación de comandos y acostumbrarse a eso es peligroso (no en ese script, pero es otra mala práctica que tiende a errores imprevistos), y por último, en el comando FINDSTR es innecesario el uso del parámetro /I pero bueno, todo lo que he mencionado en este último párrafo no tiene importancia respecto al problema.

Saludos!








NoVaC

#2
Si, tienes razón en lo de las comillas, al principio las puse por que en windows 7 se quejaba de los espacios. (por si a alguien le sirve, si lo pones con comillas tienes que poner /d para marcar como ruta o piensa que lo quieres de titulo del cmd). El problema es que el /d de xp....no es tan fiable xD y me daba muchos problemas por eso después de mil pruebas decidí hacerlo paso a paso.

Dicho esto, decir que como no conlleva ningún peligro el código, lo he metido en el servidor para que funcione en todos los ordenadores y para mi sorpresa la mayoría de XP no lo hacían, pero unos cuantos 20% + o - si  ( en cuanto a 7 lo hacen un 90% de ellos). así que asumo que el problema no es de XP en si, si no algo que le este afectando.

¿Se os ocurre algo que pueda impedir el funcionamiento del script de inicio? deciros que estoy empezando en el departamento de informática de esta empresa y las cosas son un poco...¿sencillas?o de configuraciones pobres xD por decirlo así.

Información básica de la red es un dominio en Windows server 2012 practicamente sin configurar, sin subredes ni políticas que puedan afectar. se me ocurre que quizas sean permisos o algo pero, hace mucho que estoy alejado de la informática y estoy algo oxidado así que cualquier idea sera bien recibida.

PD: Elektro muchas gracias por tu pronta respuesta y por ayudarme con tus consejos que me van de perlas para este y futuros scripts. y en cuanto a meterlo a traves del propio cmd me dice que genial, lo hace todo y es fantastico pero cuando lo intento por red continua sin ir.

Eleкtro

#3
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:
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








NoVaC

Muchas gracias Elektro, no solo me solucionas muchos problemas si no que ademas me optimizas el codigo? Eres un grande.

Muchas gracias por tu ayuda.

PD: perdona que haya tardado en responder pero llevo desde la semana pasada de marron en marron y no habia tenido tiempo. gracias por todo.