Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: melk en 18 Abril 2014, 14:14 pm



Título: [BATCH] - Ejecución de varias aplicaciones a la vez
Publicado por: melk en 18 Abril 2014, 14:14 pm
Buenas a todos,

Definitivamente, no sé que estoy haciendo mal, llevo unos días detrás del script (aunque tampoco es que haya tenido mucho tiempo).

Lo que quiero es tener un script básico en bat que me permita ejecutar un conjunto de aplicaciones.

Lo he intentado llamando las aplicaciones unas tras otras, pero el script espera a que una aplicación termine para llamar a la siguiente.

Usando start /b lo ejecuta en la misma ventana pero me escribe por cada aplicación ejecutada el mensaje de bienvenida del cmd. Aparte de que algo debo estar haciendo mal con la gestión de los gotos

La verdad que me lía bastante el uso de gotos pq nunca los he utilizado en programación web.

Bueno, os dejo el script que por ahora he intentado hacer por si algún alma caritativa puede ayudame.

Código:
@echo off 
echo "Ejecutando Xampp, Sublime Text 2 y Koala"
start /b "C:\Program Files (x86)\Koala\koala.exe"
start /b C:\xampp\xampp-control.exe
start /b "C:\Program Files\Sublime Text 2\sublime_text.exe"
set /p respuesta = Abrir Thunderbird? (s/n)

if [%respuesta%]==s goto Thunderbird
if [%respuesta%]==n goto Siguiente


:Thunderbird
echo "Abriendo Thunderbird..."
start /b "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe"

:Siguiente
set /p respuesta = Spotify, Radiosure o ninguno? (s/r/n)

if [%respuesta%]==s goto Spotify
if [%respuesta%]==r goto Radiosure
if [%respuesta%]==n goto Ninguno

:Spotify
start /b C:\Users\David\AppData\Roaming\Spotify\spotify.exe
exit

:Radiosure
start /b C:\Users\David\AppData\Local\RadioSure\RadioSure.exe
exit

:Ninguno
exit

Un saludo,  :silbar:


Título: Re: [BATCH] - Ejecución de varias aplicaciones a la vez
Publicado por: Eleкtro en 18 Abril 2014, 14:49 pm
Corre cada comando en una nueva instancia de la CMD.

Código:
CMD /[K|C] "Argumentos"

Ej:
Código
  1. Start /B "CMD" "%ComSpec%" /K " Start "APP" "Notepad.exe" "

EDITO: Addemás...
Citar
Código:
set /p respuesta = Abrir Thunderbird? (s/n)

if [%respuesta%]==s

Algo falla ahí.

1. Encerrar variables con comillas dobles.
2. No dejar espacios vacios en el nombre de la variable.
3. No añadir caracteres especiales a la expresión del IF, y encerrarla también con comillas dobles.

Ej:
Código:
Set /P "Respuesta=Pregunta"
If /i "%respuesta%"=="s" (Goto :...)

Nota: Usa el comando Choice para preguntas Booleanas.


Título: Re: [BATCH] - Ejecución de varias aplicaciones a la vez
Publicado por: NikNitro! en 18 Abril 2014, 15:58 pm
Creo recordar que poniendo un $ al final de la sentencia se ejecutaba en segundo plano y te permitia seguir llamando aplicaciones. Luego para traerlas al hilo principal se usaban bg y fg (background y foreground). Al menos en Bash. No se si habrá mucha diferencia.

Saludos ;)


Título: Re: [BATCH] - Ejecución de varias aplicaciones a la vez
Publicado por: daryo en 19 Abril 2014, 15:20 pm
Creo recordar que poniendo un $ al final de la sentencia se ejecutaba en segundo plano y te permitia seguir llamando aplicaciones. Luego para traerlas al hilo principal se usaban bg y fg (background y foreground). Al menos en Bash. No se si habrá mucha diferencia.

Saludos ;)

ojala batch fuera la mitad de potente que bash


Título: Re: [BATCH] - Ejecución de varias aplicaciones a la vez
Publicado por: NikNitro! en 19 Abril 2014, 15:24 pm
juus :(


Título: Re: [BATCH] - Ejecución de varias aplicaciones a la vez
Publicado por: melk en 20 Abril 2014, 17:02 pm
Buenas,

Gracias por la ayuda.

He cambiado todo el archivo según vuestras instrucciones.

El codigo queda ahora:

Código:
@echo off 

echo "Ejecutando Xampp, Sublime Text 2 y Koala"
Start /B "CMD" "%ComSpec%" /K " Start "APP" "C:\Program Files (x86)\Koala\koala.exe" "
Start /B "CMD" "%ComSpec%" /K " Start "APP" "C:\xampp\xampp-control.exe" "
Start /B "CMD" "%ComSpec%" /K " Start "APP" "C:\Program Files\Sublime Text 2\sublime_text.exe" "

set /P "respuesta=Abrir Thunderbird? (s/n)"

If /i "%respuesta%"=="s" (Goto :Thunderbird)
If /i "%respuesta%"=="n" (Goto :Siguiente)

:Thunderbird
echo "Abriendo Thunderbird..."
Start /B "CMD" "%ComSpec%" /K " Start "APP" "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe" "

:Siguiente
set /P "respuesta=Spotify, Radiosure o ninguno? (s/r/n)"

If /i "%respuesta%"=="s" (Goto :Spotify)
If /i "%respuesta%"=="r" (Goto :Radiosure)
If /i "%respuesta%"=="n" (Goto :Ninguno)

:Spotify
Start /B "CMD" "%ComSpec%" /K " Start "APP" "C:\Users\David\AppData\Roaming\Spotify\spotify.exe" "
exit

:Radiosure
Start /B "CMD" "%ComSpec%" /K " Start "APP" "C:\Users\David\AppData\Local\RadioSure\RadioSure.exe" "
exit

:Ninguno
exit

Y se me ejecutan las 3 primeras aplicaciones, incluyendo thunderbird si le digo que si (aunque me aparece ese molesto prompt)

Luego para la siguiente pregunta ya pasa de mi. Os dejo la salida.

Citar
"Ejecutando Xampp, Sublime Text 2 y Koala"
Abrir Thunderbird? (s/n)
C:\Users\David\Desktop>
C:\Users\David\Desktop>
C:\Users\David\Desktop>s
"Abriendo Thunderbird..."
Spotify, Radiosure o ninguno? (s/r/n)
C:\Users\David\Desktop>r
"r" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

C:\Users\David\Desktop>

Creo que me estoy perdiendo un poco...


Título: Re: [BATCH] - Ejecución de varias aplicaciones a la vez
Publicado por: Eleкtro en 20 Abril 2014, 17:43 pm
Código
  1. Choice /C "SRN" /M "Spotify, Radiosure o ninguno?"

Saludos


Título: Re: [BATCH] - Ejecución de varias aplicaciones a la vez
Publicado por: melk en 20 Abril 2014, 17:52 pm
Y pregunta de noob, ¿donde se almacena la respuesta del Choice?

Me está tirando diciendo que R o S o N no es un comando válido

Perdon por mi ignorancia  :(


Título: Re: [BATCH] - Ejecución de varias aplicaciones a la vez
Publicado por: Eleкtro en 20 Abril 2014, 18:49 pm
1. No uses el mismo nombre de variable para más de una variable o pueden entrar en conflicto sus valores...

Código:
Set /P "Respuesta1=..."
Set /P "Respuesta2=..."

2. El resultado del comando Choice se almacena en el código de salida, es decir, puedes acceder a él en la variable dinámica ERRORLEVEL.

Código
  1. @Echo OFF
  2.  
  3. Choice /C "SRN" /M "Spotify, Radiosure, o ninguno?"
  4. Call :Choice%ErrorLevel%
  5. Pause&Exit
  6.  
  7. :Choice1::S
  8. ("%AppData%\Spotify\spotify.exe")2>NUL & Goto :EOF
  9.  
  10. :Choice2::R
  11. ("%LocalAppData%\RadioSure\RadioSure.exe")2>NUL & Goto :EOF
  12.  
  13. :Choice3::N
  14. Goto :EOF

Saludos


Título: Re: [BATCH] - Ejecución de varias aplicaciones a la vez
Publicado por: melk en 20 Abril 2014, 22:29 pm
La verdad que vaya cosas más raras se ven en batch xD

Creo que terminaba antes haciéndome un script en PHP y ejecutándolo en consola xD

Bueno, a lo que voy:

Código:
@echo off 

echo "Ejecutando Xampp, Sublime Text 2 y Koala"
Start /B "CMD" "%ComSpec%" /K " Start "APP" "C:\Program Files (x86)\Koala\koala.exe" "
Start /B "CMD" "%ComSpec%" /K " Start "APP" "C:\xampp\xampp-control.exe" "
Start /B "CMD" "%ComSpec%" /K " Start "APP" "C:\Program Files\Sublime Text 2\sublime_text.exe" "

set /P "respuesta=Abrir Thunderbird? (s/n)"

If /i "%respuesta%"=="s" (Goto :Thunderbird)
If /i "%respuesta%"=="n" (Goto :Siguiente)

:Thunderbird
echo "Abriendo Thunderbird..."
Start /B "CMD" "%ComSpec%" /K " Start "APP" "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe" "

:Siguiente
Choice /C "SRN" /M "Spotify, Radiosure, o ninguno?"
Call :Choice%ErrorLevel%
Pause&Exit
 
:Choice1::S
("%AppData%\Spotify\spotify.exe")2>NUL & Goto :EOF
 
:Choice2::R
("%LocalAppData%\RadioSure\RadioSure.exe")2>NUL & Goto :EOF
 
:Choice3::N
Goto :EOF

Tengo colocado eso, la parte que me dices que no use respuesta en más de una ocasión no la entiendo muy bien ya que solo la utilizo en dos ocasiones, lectura y escritura.

Sobre el tema del Choice se sigue emperrando el sistema en que no existe R o N o S como comando y blablabla.

Estoy por programarme algo en otro lenguaje pero sólo por no darte la paliza xDD


Título: Re: [BATCH] - Ejecución de varias aplicaciones a la vez
Publicado por: Eleкtro en 20 Abril 2014, 23:23 pm
Citar
Código:
set /P "respuesta=Abrir Thunderbird? (s/n)"
set /P "respuesta=Spotify, Radiosure o ninguno? (s/r/n)"
Me refiero a que asignas un nombre de variable ('Respuesta') para lo que se supone que deberían ser dos variables distintas, esto no se debe hacer ...en ningún lenguaje, ya que solo estarás reasignando el valor a la primera variable y esto puede ocasionar confusiones y generar errores por valores reemplazados.

Citar
Código
  1. If /i "%respuesta%"=="s" (Goto :Thunderbird)
  2.  
  3. :Thunderbird
  4. ...
  5.  
  6. :Siguiente
  7. ...
  8. Pause&Exit
  9.  
En el bloque de la etiqueta :Thunderbird debes especificar como última instrucciún el comando Exit, u otro comando para no seguir la ejecución de los siguientes bloques de abajo (:Siguiente)

Aparte de esas correcciones minuciosas ... por lo demás el código debería funcionar, el comando Choice detiene la ejecución del hilo para esperar el Input por parte del usuario, solo puedes pulsar "S","R", o "N", es imposible que "no funcione" y te de error, a mi me funcionaba tanto este último Script que publicaste, como el anterior, pero si dices que no va, pues no va, algo estamos dejando pasar por alto ...pero es posible que no sea algo referente al código.

¿Usas Windows XP? (la sintaxis del comando Choice es distinta, revísala)
¿Tienes el directorio 'C:\Windows\System32' agregado a la variable de entorno PATH de Windows?.
¿El error te aparece despues de introducir el Input en el comando choice, o antes de que el comando se ejecute?.

Saludos


Título: Re: [BATCH] - Ejecución de varias aplicaciones a la vez
Publicado por: melk en 22 Abril 2014, 14:24 pm
Hey Elektro, muchas gracias por tu ayuda...

Pero la verdad que terminé haciéndolo antes con autohotkey. Siento las molestias y gracias por tu tiempo, de verdad

Como entiendo que entra dentro de la sección scripting dejo el script por si le sirve a alguien:

Código:
MsgBox, 4, , Abrir Thunderbird?
IfMsgBox Yes
    Run C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe


salir = 0;
while salir <> 1 {
InputBox, eleccionmusical, Programa Musical, Elige tu programa musical (1: Spotify | 2: Radiosure)
if ErrorLevel {
   MsgBox, No se abrira ningun programa musical
   break
} else {
if (eleccionmusical = "1") || (eleccionmusical = "2") {
    break
   } else {
    MsgBox, Opcion no valida
   }
}
}

Run C:\Program Files (x86)\Koala\koala.exe
Run C:\xampp\xampp-control.exe
Run C:\Program Files\Sublime Text 2\sublime_text.exe
Run http://localhost

if (eleccionmusical = "1") {
Run C:\Users\David\AppData\Roaming\Spotify\spotify.exe
} else if (eleccionmusical = "2") {
Run C:\Users\David\AppData\Local\RadioSure\RadioSure.exe
}

Un saludo

PD: Se que la variables salir no sirve para nada, es resto de codigo que se me olvidó quitar XD