Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: daibaq en 24 Enero 2014, 15:16 pm



Título: Trabajo en batch con textos
Publicado por: daibaq en 24 Enero 2014, 15:16 pm
Hola!
llevo muchos años siguiéndoos, y siempre que he tenido alguna duda e encontrado la solución buscando...
pero en este caso necesito un poco de ayuda porque soy bastante nulo en batch.
la cuestiones que tengo un .exe que me genera una lista de procesos con su UID de esta manera:
Código:
ProcessId	ImageName  
428 csrss.exe  
ProcessId ImageName  
436 wininit.exe  
ProcessId ImageName  
484 winlogon.exe

necesito recoger  el  ID de un par de procesos y volver a ejecutar el .exe con otra opción y el ID del proceso.
ejemplo: recoger el 436 sabiendo que el proceso en cuestión es wininit.exe.
lo único que se me ocurre es generar un archivo de texto con los datos, y despues trabajar sobre el ,pero no sé si en batch hay las posibilidades como en Linux para trabajar con archivos con texto.

gracias.



[MOD]: Debes utilizar las etiquetas de código, porfavor lee las normas.


Título: Re: Trabajo en batch con textos
Publicado por: Almapa en 26 Enero 2014, 14:25 pm
A ver el .exe te genera un archivo de texto con estos datos que has puesto? y, exactamente que es lo que quieres? guardas un número y un nombre en variables del proceso que quieres?

Explicate un poco más y te podré ayudar ;)


Título: Re: Trabajo en batch con textos
Publicado por: Eleкtro en 27 Enero 2014, 15:10 pm
Enviar la salida a un archivo de texto para trabajar ese texto es algo innecesario ya que puedes trabajar diréctamente con los datos que se muestran en la consola.

Puedes usar el comando Tasklist para obtener el PID, o puedes usar la interface WMI (en Batch se utiliza con el comando externo WMIC.exe) para obtener el PID de "X" proceso, sea como sea las dos maneras requieren el uso de un FOR para filtrar la salida de la consola (o el contenido de un archivo de texto, si lo prefieres...).

Te codearé un ejemplo usando WMIC ya que es un método más óptimo:

Código
  1. @Echo OFF
  2.  
  3. Set "Processes=Wininit; CMD, Firefox; Winlogon"
  4.  
  5. For %%# in (%Processes%) Do (
  6.  
  7. Call :GetPID "%%#"
  8. Echo Process Name: %%#
  9. Call Echo Process Id. : %%PID%% | MORE
  10.  
  11. )
  12.  
  13. Pause&Exit
  14.  
  15. :GetPID
  16. For /F "Delims=" %%# in (
  17. 'WMIC.exe Process Where Name^="%~1.exe" get ProcessID ^| Findstr "[0-9]"'
  18. ) Do (
  19. Set /A "PID=%%#"
  20. )
  21. GOTO :EOF

(http://img543.imageshack.us/img543/1721/jpcy.png)

Saludos.