elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [BATCH] "If Exist", ¿se pueden poner mas condiciones?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [BATCH] "If Exist", ¿se pueden poner mas condiciones?  (Leído 13,957 veces)
MaX2

Desconectado Desconectado

Mensajes: 116


Ver Perfil
[BATCH] "If Exist", ¿se pueden poner mas condiciones?
« en: 1 Diciembre 2014, 09:38 am »

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:


Código:
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 Desconectado

Mensajes: 9.810



Ver Perfil
Re: [BATCH] "If Exist", ¿se pueden poner mas condiciones?
« Respuesta #1 en: 1 Diciembre 2014, 09:54 am »

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
  1. @Echo OFF
  2.  
  3. If Defined ProgramFiles(x86) (
  4. Start /W "thunderbird for Winx64" "%ProgramFiles(x86)%\Mozilla Thunderbird\thunderbird.exe"
  5. ) Else (
  6. Start /W "thunderbird for Winx86" "%ProgramFiles%\Mozilla Thunderbird\thunderbird.exe"
  7. )
  8.  

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
  1. If Condición1 (
  2. ...
  3. ) Else (
  4. ...
  5. )
  6.  
  7. If Condición2 (
  8. ...
  9. ) Else (
  10. ...
  11. )

También puedes anidarlos, ejemplo:

Código
  1. If Condición1 (
  2. ...
  3.  
  4. If Condición2 (
  5. ...
  6. ) Else (
  7. ...
  8. )
  9.  
  10. ) Else (
  11. ...
  12. )

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

Código
  1. If Condición1 If Condición2 (
  2. ...
  3. ) Else (
  4. ...
  5. )

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 Desconectado

Mensajes: 116


Ver Perfil
Re: [BATCH] "If Exist", ¿se pueden poner mas condiciones?
« Respuesta #2 en: 1 Diciembre 2014, 10:01 am »

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 Desconectado

Mensajes: 9.810



Ver Perfil
Re: [BATCH] "If Exist", ¿se pueden poner mas condiciones?
« Respuesta #3 en: 1 Diciembre 2014, 10:09 am »

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

Código
  1. @Echo OFF
  2.  
  3. If Exist "%ProgramFiles(x86)%\Mozilla Thunderbird\thunderbird.exe" (
  4. Start /W "thunderbird" "%ProgramFiles(x86)%\Mozilla Thunderbird\thunderbird.exe"
  5. )
  6.  
  7. If Exist "%ProgramFiles%\Mozilla Thunderbird\thunderbird.exe" (
  8. Start /W "thunderbird" "%ProgramFiles%\Mozilla Thunderbird\thunderbird.exe"
  9. )
  10.  
  11. If Exist "%HomeDrive%\correo\thunderbird\thunderbird.exe" (
  12. Start /W "thunderbird" "%HomeDrive%\correo\thunderbird\thunderbird.exe"
  13. )
  14.  

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 Desconectado

Mensajes: 9.810



Ver Perfil
Re: [BATCH] "If Exist", ¿se pueden poner mas condiciones?
« Respuesta #4 en: 1 Diciembre 2014, 10:30 am »

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:

Código
  1. @ECHO OFF & CHCP 1252 1>NUL
  2.  
  3. set "File=firefox.exe"
  4. Set "DRIVES="
  5.  
  6. Call :GetDrives
  7.  
  8. :: Proceso cada letra de unidad para buscar "X" archivo.
  9. For %%D in (%DRIVES%) Do (
  10.  
  11. Echo [+] Procesando unidad "%%D:\" para buscar "%File%"
  12.  
  13. For /F "Delims=" %%# in (
  14. 'Dir /B /S /A-D "%%D:\*%File%*" 2^>Nul'
  15. ) Do (
  16. Echo %%~nf#
  17. REM Start /B "" "%%~nf#"
  18. )
  19. )
  20.  
  21. Pause&Exit
  22.  
  23. :GetDrives:: By Elektro
  24.  
  25. REM WMI INFO:
  26. REM Class: Win32_LogicalDisk
  27. REM Drivetype 2 = Removable
  28. REM Drivetype 3 = Local hard disk
  29.  
  30. :: Filtro el output del comando WMIC.
  31. For /F %%# in (
  32. 'wmic.exe logicaldisk get caption^,drivetype ^| FINDSTR "2 3"'
  33. ) Do (
  34. :: Saco las letras de los dispositivos disponibles.
  35. Call Set "DRIVES=%%DRIVES%%%%#"
  36. )
  37.  
  38. :: Reemplazo el caracter ":" del resto de letras por un caracter de "espacio",
  39. :: De esta manera puedo usar el delimitador por defecto ("espacio") en un FOR.
  40. Set "DRIVES=%DRIVES::= %"
  41. Goto:EOF

Output:
Código:
[+] 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 Desconectado

Mensajes: 116


Ver Perfil
Re: [BATCH] "If Exist", ¿se pueden poner mas condiciones?
« Respuesta #5 en: 1 Diciembre 2014, 11:26 am »

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

Código:
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 Desconectado

Mensajes: 9.810



Ver Perfil
Re: [BATCH] "If Exist", ¿se pueden poner mas condiciones?
« Respuesta #6 en: 1 Diciembre 2014, 12:24 pm »

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é:
Código:
%ProgramFiles%\...
%ProgramFiles(x86)%\...

Saludos
« Última modificación: 1 Diciembre 2014, 12:28 pm por Eleкtro » En línea

MaX2

Desconectado Desconectado

Mensajes: 116


Ver Perfil
Re: [BATCH] "If Exist", ¿se pueden poner mas condiciones?
« Respuesta #7 en: 1 Diciembre 2014, 16:18 pm »

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:

Código:
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 Desconectado

Mensajes: 4


Ver Perfil
Re: [BATCH] "If Exist", ¿se pueden poner mas condiciones?
« Respuesta #8 en: 3 Diciembre 2014, 16:33 pm »

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 Desconectado

Mensajes: 116


Ver Perfil
Re: [BATCH] "If Exist", ¿se pueden poner mas condiciones?
« Respuesta #9 en: 3 Diciembre 2014, 17:43 pm »

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

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Ayuda] modificar "start page" en "internet explorer" con "batch"
Scripting
taton 7 16,536 Último mensaje 20 Septiembre 2006, 01:45 am
por taton
[BATCH] Ayuda con este script sobre "if exist" y "takeown" (SOLUCIONADO)
Scripting
SuperDraco 4 11,891 Último mensaje 30 Noviembre 2009, 21:05 pm
por Angel Doze
[DUDA] Se puede poner un "botón" en batch
Scripting
MDd2 5 2,298 Último mensaje 22 Febrero 2017, 11:26 am
por z3nth10n
[Pregunta]: Error garrafal "table doesn't exist in engine"
Bases de Datos
Leguim 1 2,023 Último mensaje 25 Marzo 2020, 21:46 pm
por MinusFour
Error TKINTER: _tkinter.TclError: image "pyimage2" doesn't exist
Scripting
Xyzed 4 3,662 Último mensaje 30 Enero 2021, 14:37 pm
por Danielㅤ
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines