Autor
|
Tema: [BATCH] "If Exist", ¿se pueden poner mas condiciones? (Leído 14,605 veces)
|
MaX2
Desconectado
Mensajes: 116
|
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.
|
|
« Última modificación: 10 Diciembre 2014, 06:40 am por MaX2 »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.866
|
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. Start /W "thunderbird for Winx64" " %ProgramFiles(x86)%\Mozilla Thunderbird\thunderbird.exe" Start /W "thunderbird for Winx86" " %ProgramFiles%\Mozilla Thunderbird\thunderbird.exe" )
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: ... ... ) ... ... )
También puedes anidarlos, ejemplo: ... ... ... ) ... )
Quizás también te sirva saber que Batch soporta el operador AND, de forma oculta, ejemplo: If Condición1 If Condición2 ( ... ... )
Esto sería, If Condición1 y Condición2 se cumplen then...Saludos
|
|
« Última modificación: 1 Diciembre 2014, 10:05 am por Eleкtro »
|
En línea
|
|
|
|
MaX2
Desconectado
Mensajes: 116
|
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.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.866
|
Creo que te refieres a esto, entonces simplemente añade los If necesarios: 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" )
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!
|
|
« Última modificación: 1 Diciembre 2014, 10:12 am por Eleкtro »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.866
|
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. Ejemplo: :: Proceso cada letra de unidad para buscar "X" archivo. Echo [+] Procesando unidad " %%D:\" para buscar " %File%" For /F "Delims=" %%# in ( ' Dir /B /S /A-D " %%D:\* %File%*" 2 ^>Nul' REM Start /B "" "%%~nf#" ) ) :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. 'wmic.exe logicaldisk get caption^,drivetype ^| FINDSTR "2 3"' :: Saco las letras de los dispositivos disponibles. ) :: 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::= %"
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"
|
|
|
En línea
|
|
|
|
MaX2
Desconectado
Mensajes: 116
|
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.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.866
|
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 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
|
|
« Última modificación: 1 Diciembre 2014, 12:28 pm por Eleкtro »
|
En línea
|
|
|
|
MaX2
Desconectado
Mensajes: 116
|
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.
|
|
|
En línea
|
|
|
|
nno
Desconectado
Mensajes: 4
|
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!!!
|
|
|
En línea
|
|
|
|
MaX2
Desconectado
Mensajes: 116
|
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.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Ayuda] modificar "start page" en "internet explorer" con "batch"
Scripting
|
taton
|
7
|
17,255
|
20 Septiembre 2006, 01:45 am
por taton
|
|
|
[BATCH] Ayuda con este script sobre "if exist" y "takeown" (SOLUCIONADO)
Scripting
|
SuperDraco
|
4
|
12,401
|
30 Noviembre 2009, 21:05 pm
por Angel Doze
|
|
|
[DUDA] Se puede poner un "botón" en batch
Scripting
|
MDd2
|
5
|
2,565
|
22 Febrero 2017, 11:26 am
por z3nth10n
|
|
|
[Pregunta]: Error garrafal "table doesn't exist in engine"
Bases de Datos
|
Leguim
|
1
|
2,233
|
25 Marzo 2020, 21:46 pm
por MinusFour
|
|
|
Error TKINTER: _tkinter.TclError: image "pyimage2" doesn't exist
Scripting
|
Xyzed
|
4
|
4,052
|
30 Enero 2021, 14:37 pm
por Danielㅤ
|
|