[BATCH] "If Exist", ¿se pueden poner mas condiciones?

Iniciado por MaX2, 1 Diciembre 2014, 09:38 AM

0 Miembros y 1 Visitante están viendo este tema.

MaX2

Hola,

En una aplicación que tengo, he puesto un enlace para se ejecute el gestor de correo Thunderbird


El Thunderbird en unos ordenadores esta instalado en una versión de Windows de 32.bit y en otros de 64-bit por lo que la carpeta de instalación cambia.


Desde el enlace que tengo puesto, lo dirijo a que ejecute un archivo *.Bat o *..cmd con el siguiente código y funciona:


if exist C:\"Archivos de programa"\"Mozilla Thunderbird"\thunderbird.exe
(START C:\"Archivos de programa"\"Mozilla Thunderbird"\thunderbird.exe)
else (START C:\"Program Files (x86)"\"Mozilla Thunderbird"\thunderbird.exe)


He probado a poner una condición mas, vamos un "else", o no se puede utilizar, o lo estoy haciendo mal porque no me funciona.


Estoy intentando poner una condición mas, ya no con el Thunderbird, si no con otra aplicación,  que se puede encontrar instalada en rutas diferentes, como puedo poner mas condiciones para que ejecute la aplicación en otras rutas ?


Salu2.




[MOD]:
1) Debes insertar el código en su respectiva etiqueta.
2) Debes intentar especificar el lenguaje al que te refieres en el título de tu pregunta.

Eleкtro

#1
El comando Start espera como primer argumento un título, y como segundo argumento la ruta del archivo, estás cometiendo un fallo muy habitual.

Código (dos) [Seleccionar]
@Echo OFF

If Defined ProgramFiles(x86) (
Start /W "thunderbird for Winx64" "%ProgramFiles(x86)%\Mozilla Thunderbird\thunderbird.exe"
) Else (
Start /W "thunderbird for Winx86" "%ProgramFiles%\Mozilla Thunderbird\thunderbird.exe"
)

Exit


EDITO: Perdón, no leí el final de la duda que formulaste:

No, Batch no soporta multiples condiciones del tipo Else (ElseIf...), lo único que puedes hacer es usar múltiples If, por ejemplo:

Código (dos) [Seleccionar]
If Condición1 (
...
) Else (
...
)

If Condición2 (
...
) Else (
...
)


También puedes anidarlos, ejemplo:

Código (dos) [Seleccionar]
If Condición1 (
...

If Condición2 (
...
) Else (
...
)

) Else (
...
)


Quizás también te sirva saber que Batch soporta el operador AND, de forma oculta, ejemplo:

Código (dos) [Seleccionar]
If Condición1 If Condición2 (
...
) Else (
...
)


Esto sería, If Condición1 y Condición2 se cumplen then...

Saludos








MaX2

Gracias Eleкtro, pero si en otro ordenador el programa Thunderbird se encontrase por ejemplo en

C:\correo\thunderbird\hunderbird.exe

He puesto en caso del hunderbird porque es con el que estoy ahora, pero se me puede dar el caso de tener que ejecutar otra aplciacion que se encuentre en C: ya sea en archivos de programas, o en otra carpeta o subcarpetas, o bien en la unidad D:



Salu2.

Eleкtro

#3
Creo que te refieres a esto, entonces simplemente añade los If necesarios:

Código (dos) [Seleccionar]
@Echo OFF

If Exist "%ProgramFiles(x86)%\Mozilla Thunderbird\thunderbird.exe" (
Start /W "thunderbird" "%ProgramFiles(x86)%\Mozilla Thunderbird\thunderbird.exe"
)

If Exist "%ProgramFiles%\Mozilla Thunderbird\thunderbird.exe" (
Start /W "thunderbird" "%ProgramFiles%\Mozilla Thunderbird\thunderbird.exe"
)

If Exist "%HomeDrive%\correo\thunderbird\thunderbird.exe" (
Start /W "thunderbird" "%HomeDrive%\correo\thunderbird\thunderbird.exe"
)

Exit


También podrías ahorrarte cualquier If y en su lugar utilizar el comando DIR para realizar una búsqueda en los discos duros conectados según el nombre del archivo (en este caso "thunderbird.exe") para así hallar su ubicación exacta y ejecutar el programa sin conocer su ruta exacta por un "IF Exist Ruta", pero bueno, no se si llegas a necesitar tanto.

Saludos!








Eleкtro

Cita de: Eleкtro en  1 Diciembre 2014, 10:09 AMTambién podrías ahorrarte cualquier If y en su lugar utilizar el comando DIR para realizar una búsqueda en los discos duros conectados según el nombre del archivo (en este caso "thunderbird.exe") para así hallar su ubicación exacta y ejecutar el programa sin conocer su ruta exacta por un "IF Exist Ruta", pero bueno, no se si llegas a necesitar tanto.

Ejemplo:

Código (dos) [Seleccionar]
@ECHO OFF & CHCP 1252 1>NUL

set "File=firefox.exe"
Set "DRIVES="

Call :GetDrives

:: Proceso cada letra de unidad para buscar "X" archivo.
For %%D in (%DRIVES%) Do (

Echo.
Echo [+] Procesando unidad "%%D:\" para buscar "%File%"

For /F "Delims=" %%# in (
'Dir /B /S /A-D "%%D:\*%File%*" 2^>Nul'
) Do (
Echo %%~nf#
REM Start /B "" "%%~nf#"
)
)

Pause&Exit

:GetDrives:: By Elektro

REM WMI INFO:
REM Class: Win32_LogicalDisk
REM Drivetype 2 = Removable
REM Drivetype 3 = Local hard disk

:: Filtro el output del comando WMIC.
For /F %%# in (
'wmic.exe logicaldisk get caption^,drivetype ^| FINDSTR "2 3"'
) Do (
:: Saco las letras de los dispositivos disponibles.
Call Set "DRIVES=%%DRIVES%%%%#"
)

:: Reemplazo el caracter ":" del resto de letras por un caracter de "espacio",
:: De esta manera puedo usar el delimitador por defecto ("espacio") en un FOR.
Set "DRIVES=%DRIVES::= %"
Goto:EOF


Output:
[+] Procesando unidad "C:\" para buscar "firefox.exe"
C:\Program Files (x86)\Mozilla Firefox\firefox.exe

[+] Procesando unidad "D:\" para buscar "firefox.exe"
D:\Programas\Internet\Firefox.exe

[+] Procesando unidad "E:\" para buscar "firefox.exe"

[+] Procesando unidad "F:\" para buscar "firefox.exe"








MaX2

Estupendo, gracias otra vez Eleкtro, el codigo para utilizar el comando DIR lo voy a copiar por si alguna vez tengo que utilizarlo, aunque creo que para mi lo veo algo mas complicado.

Utilizar varios If Exist creo que sera mejor para mi, jeje,

Lo que me extraño fue que en la vesión de 32-bit de windows, no se pudiese utilizar


if exist C:\"Program Files"\"Mozilla Thunderbird"\thunderbird.exe (
START C:\"Program Files"\"Mozilla Thunderbird"\thunderbird.exe)
else (START C:\"Program Files (x86)"\"Mozilla Thunderbird"\thunderbird.exe)


En lugar de poner Program Files le tenia que poner Archivos de programa si no no se ejecutaba; windows 32.bit tiene una carpeta con el nombre Archivos de programa, que tendria que se lo mismo que Progam Files, o al menos asi lo es en Windwos 64.bit


Lo dicho.... gracias por tu ayuda.

Eleкtro

#6
Cita de: MaX2 en  1 Diciembre 2014, 11:26 AMEn lugar de poner Program Files le tenia que poner Archivos de programa si no no se ejecutaba; windows 32.bit tiene una carpeta con el nombre Archivos de programa, que tendria que se lo mismo que Progam Files, o al menos asi lo es en Windwos 64.bit

En lo referente a las carpetas del sistema, windows administra dos cosas, la primera es el nombre nativo de la carpeta (ej: Program files), y la segunda es el nombre a mostrar o "DisplayName" (Ej: Archivos de programa).

Deduzco que estás utilizando Windows XP, ya que exceptuando Windows XP, en versiones posteriores debes referirte/acceder a una carpeta por su nombre real, en inglés.

Pero en Windows XP debes referirte a una carpeta por su nombre en el idioma de instalación que usaste (es decir, en castellano, "Archivos de programa", "Escritorio", etc), imagino que Windows XP x64 debería seguir esa misma estructura, pero por lo que comentas parece que no lo es ya que puedes referirte a dicha carpeta por el nombre "program files".

De todas formas las variables de entorno están para algo y es lo que debes usar bajo el windows que sea como hice yo en el código que mostré:
%ProgramFiles%\...
%ProgramFiles(x86)%\...


Saludos








MaX2

No es Windowsw XP, no lo he llegado a verlo porque esta un un puesto de trabajo donde yo no puedo ver el ordenador personalmente, pero me han dicho que es windows 7, y al tener solo la carpeta "Archivos de programa" se trata de la version de 32-bit.

El primer bat que le envie para que probara a ver si abría el thunderbird, fue este y no le funcionaba:


if exist C:\"Program Files"\"Mozilla Thunderbird"\thunderbird.exe (
START C:\"Program Files"\"Mozilla Thunderbird"\thunderbird.exe)
else (START C:\"Program Files (x86)"\"Mozilla Thunderbird"\thunderbird.exe)


Así que le envié otro bat cambiando la ruta "Program Files" por la de "Archivos de programa" y funciono.

Pero para asegurarme le dije que capturase la pantalla para ver donde estaba instalado thunderbird, y si se ve que es windows 7.


Salu2.



nno

Hola, tengo un problema con thunderbird. El problema es que me pasé a ubuntu 14.04 (antes win xp) e instalé thunderbird. Lo configuré con mis carpetas y demás.
Un día despues de actualizar todo, elimine con Bleachbit los archivos que no sirven (creo) y despues de eso, al abrir thunderbird, no me apareció mi cuenta. Ni carpetas, ni correo, nada. Como si no ubiera configurado nada.
La cuestión es que en las carpetas ocultas esta la " .thunderbird " con las carpetas y todo.
He probado de instalarlo de nuevo, pero nada. Y ahora al intentar arrancar el thunderbird, me dice que no está o que es inaccesible.
He buscado por internet, pero no encuentro solución.
Me podeis ayudar???

Gracias!!!

MaX2

Hola nno, el ubuntu no lo utilizo así que mi ayuda en ese problema te sera de poca, pero como tu dices que has eliminado algunas cosas y desde entonces te dejo de funcionar, podrias volver a instalarlo y no eliminar esos archivos, a ver que pasa.

Por otro lado, creo que sera mejor que crees un post nuevo con este problema en concreto, ya que no tienen que ver mucho con lo que pregunto yo, te lo digo porque de esa forma podrias tener mas ayuda de gente que utilice lo mismo que tu.


Salu2.