Batch que busque un archivo y lo ejecute y ejecutar combinaciones del teclado...

Iniciado por Dsalomon, 30 Agosto 2012, 07:25 AM

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

Dsalomon

hol amigos... les saludo desde Guatemala... la verad es que estoy varado en una labor

estoy armando un proyecto que va asi:


1. un script que busque en la carpeta y subcarpeta un archivo ejecutable en donde este... no en C: u otra unidad...
2. correr este ejecutable
3. minimizar el programa con las teclas Alt+Espacio+N (por que este programa no obedece las opciones de iniciar minimizado /m)


probe asi pero no doy con la linea adecuada:



@echo off
%Cd%
for /d /r %%_ in (*) do (
if exist "%%_\Barra.exe" (
Start Barra.exe
)
)
exit



y tambien se me ocurrea algo mas simple:



@echo off
START /D  /S Barra.exe
exit


el codigo para correr Alt+Espacio+N no lo encuentro...  :-(


agradecere cualquier sugerencia...




Eleкtro

Cita de: Dsalomon en 30 Agosto 2012, 07:25 AMeste programa no obedece las opciones de iniciar minimizado /m
El parámetro es "/MIN", no "/M", ¿Estás seguro de haberlo comprobado escribiendo el parámetro que te dije?.

De todas formas estás utilizando mal el FOR y el START en la condicional, Con esto es suficiente:

Código (dos) [Seleccionar]
@echo off
FOR /R %%_ in (*barra.exe) do ("%%_")
Exit


No puedes enviar pulsaciones de teclado usando Batch, Pero puedes recurrir a algo tán sencillo como VBS:

Código (dos) [Seleccionar]
@echo off

Set WAIT=2000
:: WAIT = Los milisegundos de espera antes de que la aplicación "barra.exe" se termine de cargar.
:: Si la aplicación no está cargada, Mandar la combinación de teclas no sirve para nada...

FOR /R %%_ in (*barra.exe) do (Start /B CMD /C "%%_")

(
Echo wscript.Sleep %WAIT%
Echo Set oWSH = CreateObject^("WScript.Shell"^)
Echo oWSH.SendKeys "%% N"
)>"%TEMP%\sendkeys.vbs"

Start /B wscript "%TEMP%\sendkeys.vbs"

Exit


Saludos








Valium7

¿Alguien explica las lineas mas importantes?cuando busca el file no veo xD

Eleкtro

#3
Cita de: Valium7 en 30 Agosto 2012, 16:47 PM¿Alguien explica las lineas mas importantes?cuando busca el file no veo xD

Cita de: EleKtro H@cker en 30 Agosto 2012, 08:42 AM
Código (dos) [Seleccionar]
FOR /R %%_ in (*barra.exe) do ("%%_")

El comando busca en las subcarpetas del directorio actual todos los archivos que contengan en su nombre "barra.exe", Y guarda la ruta completa del file encontrado en la variable "%%_", Y luego ejecuta el file.

Espero haberte aclarado la duda ::)

Saludos








Dsalomon

eres la ley... bueno el codigo...
perdona la insistencia me podrias explicar como personalizar el VBS, la verdad no tengo experincia con ese lenguaje... pero me gustaria saber como decirle que teclas exactamente corra para poder decirle que haga mas cosas, ademas me gustaria quitar el mensaje de que el archivo no fuen encontrado, por si muevo a otra ubicacion el batch... muchas gracias... por tu tiempo y corrección, seguimos aprendiendo...

Eleкtro

Cita de: Dsalomon en  1 Septiembre 2012, 10:38 AMme podrias explicar como personalizar el VBS, me gustaria saber como decirle que teclas exactamente corra
http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send.aspx
Ahí tienes la referencia de las teclas especiales. Si quieres enviar teclas alfabéticas solo tienes que escribirlas tal cual.

Te explico el code de antes por si te ayuda a entenderlo mejor:
Código (dos) [Seleccionar]
Echo oWSH.SendKeys "%% N"
% equivale a "ALT"    (Pero uso dos %% solamente para poder escribir el simbolo en el archivo.)
(un espacio) equivale a "ESPACIO"
N equivale a "N"
PD: Si no te funciona, haz la combinación de teclas así:
Código (dos) [Seleccionar]
Echo oWSH.SendKeys "%%( N)"

Cita de: Dsalomon en  1 Septiembre 2012, 10:38 AMme gustaria quitar el mensaje de que el archivo no fuen encontrado
¿Que mensaje? :xD A mi no me sale ninguno :-/, ¿Cuando te aparece ese mensaje?


Saludos








Dsalomon

¿Teacher se puede especificar que ventana solo por el nombre de la misma para minimizar?


creo que entendi asi:

1.   Le dice que tiene que esperar a cargar la aplicación "MIPROGRAMA.exe"

2.   Busca los archivos que se llamen "MIPROGRAMA.exe" dentro de las carpetas y subcarpetas y guarda el nombre del archivo en una variable

3.   Inicia la consola de Windows en la misma ventana e ejecuta lo que encontró y guardo en la variable %%_ y lo inicia, o sea corre el programa deseado

4.   Después en código le dice que espere

5.   Después crea un código VBS

6.   Envía las teclas Alt+espacio+N  (%% N) No entiendo bien pero pareciera %%  que son 2 veces ALT

7.   Envía lo que se escribió a un archivo temporal llamado Sendkeys.vbs

8.   En la misma ventana de consola llama al Script Sendkeys.vbs


y si quisiera que en lugar de ALT+barra+N fuere Control+N.... (para otra aplicacion)

por que probe asi

"%^( N)"

y asi

"^( N)"


pero no me funciono


Dsalomon

teacher:  todo se ejecuta correctamente pero la ventana del DOS queda abierta... como podria solucionar esto...

tambien pregunto como hago para que borre en automatico el archivo temporal que crea...?


Gracias por tu ayuda hasta ahora todo va marchando bien gracias a tu intervencion...

Eleкtro

Cita de: Dsalomon en  1 Septiembre 2012, 12:48 PM¿Teacher se puede especificar que ventana solo por el nombre de la misma para minimizar?
Puedes activar la ventana:
Código (vb) [Seleccionar]
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.AppActivate "TITULO DE LA VENTANA"

PD: O usando aplicaciones de terceros como CMDOW o NIRCMD en batch.

Cita de: Dsalomon en  1 Septiembre 2012, 12:48 PMControl+N
Código (vb) [Seleccionar]
objShell.SendKeys "^N"
PD: También puedes usar NIRCMD para enviar combinaciones.

Cita de: Dsalomon en  1 Septiembre 2012, 13:36 PMteacher:  todo se ejecuta correctamente pero la ventana del DOS queda abierta... como podria solucionar esto...
Prueba así:
FOR /R %%_ in (*barra.exe) do (Echo "%%_"| Find " " >NUL && (Start /B "%%_") || (Start /B %%_))

Cita de: Dsalomon en  1 Septiembre 2012, 13:36 PMtambien pregunto como hago para que borre en automatico el archivo temporal que crea...?
DEL /?

Saludos








Dsalomon

que hago si no uso Windows 7

yo uso XP Sp3 tambien...

para esperar

Código (dos) [Seleccionar]
SET WAIT=2000
Echo wscript.Sleep %WAIT%


O como usar

Código (dos) [Seleccionar]
ping -n 05 localhost>nul


por ejemplo aqui tengo un exctracto de codigo en donde

1. le digo busque el proceso de VIDEOPLAYER o sea "proceso"

2. y sino lo encuentra ejecute el programa Ds clock...

3. Espere a que carque un proceso antes de ejecutar el otro

4. si lo encuentra no haga nada

5. haga un Loop por si en cualquier momento se cierra el VIDEOPLAYER muestre el reloj



pero el problema es que el programa Ds Clock carga rapido y el otro carga lento

Código (dos) [Seleccionar]
set proceso=VIDEOPLAYER.exe

tasklist | find "%proceso%" >nul
if %Errorlevel% == 1 (START /D "%Programfiles%\DS Clock\" dsclock.exe)