Trabajo en batch con textos

Iniciado por daibaq, 24 Enero 2014, 15:16 PM

0 Miembros y 1 Visitante están viendo este tema.

daibaq

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:
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.

Almapa

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 ;)

Eleкtro

#2
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 (dos) [Seleccionar]
@Echo OFF

Set "Processes=Wininit; CMD, Firefox; Winlogon"

For %%# in (%Processes%) Do (

Call :GetPID "%%#"
Echo Process Name: %%#
Call Echo Process Id. : %%PID%% | MORE

)

Pause&Exit

:GetPID
For /F "Delims=" %%# in (
'WMIC.exe Process Where Name^="%~1.exe" get ProcessID ^| Findstr "[0-9]"'
) Do (
Set /A "PID=%%#"
)
GOTO :EOF




Saludos.