Пакетный файл Windows: PID последнего процесса? - PullRequest
7 голосов
/ 13 января 2011

Я запускаю браузер из командного файла.

START "www.google.com"

Я хотел бы знать, что PID этого окна браузера запущен.

На одном компьютере может быть запущено много окон браузера. Мне нужно найти PID процесса, который был запущен только моим командным файлом. Я пробовал с фильтром WINDOWTITLE. Но это не очень хорошая идея, поскольку названия могут измениться в будущем. Я использую Windows XP / 7

Любая помощь будет оценена. Спасибо.

Ответы [ 5 ]

2 голосов
/ 29 ноября 2013

Для чего стоит (вопрос более 2 лет) этот код делает свое дело, просто измените переменную в соответствии с браузером по умолчанию exe

set "browser=palemoon.exe"

tasklist /FI "imagename eq %browser%" /NH /FO csv > task-before.txt
start www.google.com
tasklist /FI "imagename eq %browser%" /NH /FO csv > task-after.txt

:: fc /L /LB1  test4-Before.txt test4-After.txt | find /I "%browser%"
for /f "delims=, tokens=2,*" %%A in ('"fc /L /LB1  task-before.txt task-after.txt | find /I "%browser%""') do set pid=%%A

SETLOCAL enabledelayedexpansion
pid=!pid:"=!
ENDLOCAL
echo pid is %pid%
0 голосов
/ 23 февраля 2012

Я смотрю на это уже около 2 часов, и я думаю, что есть способ сделать это, но он требует более глубокого понимания того, как windows обрабатывает iexplore.exe для PID ...

У меня есть рабочая версия командного файла, который я написал, который даст вам то, что вы хотите, НО только если это ПЕРВОЕ И ТОЛЬКО окно Internet Explorer.

Почему-то я могуPID не меняется при открытии новых браузеров, но я могу получить результаты, если нет открытого окна (очевидно, потому что PID отсутствует)

Во всяком случае, это то, что у меня есть ... вы должныбыть в состоянии запустить это в вашей системе, и он скажет вам, что нет никаких различий, и это может фактически привести к результатам, если ваш браузер по умолчанию - Firefox или Chrome или что-то ... просто нужно внести изменения в то, что я предоставляю.

@echo off
IF EXIST c:\temp\pshell.txt del c:\temp\pshell.txt
IF EXIST C:\temp\PID1.txt del C:\temp\PID1.txt
IF EXIST C:\temp\PID2.txt del C:\temp\PID2.txt
IF EXIST C:\temp\PowerFormat.txt del C:\temp\PowerFormat.txt
powershell.exe Get-Process iexplore>C:\temp\pshell.txt
FOR /F "skip=3 tokens=7 delims= " %%1 IN ( c:\temp\pshell.txt ) DO @echo %%1>> C:\temp\PID1.txt
start "title" "www.google.com"
powershell.exe Get-Process iexplore>C:\temp\pshell.txt
FOR /F "skip=3 tokens=7 delims= " %%2 IN ( c:\temp\pshell.txt ) DO @echo %%2>> C:\temp\PID2.txt

FC /L c:\temp\pid1.txt c:\temp\pid2.txt> C:\temp\FileComparison.txt
FOR /F "tokens=7 delims=" %%3 IN (c:\temp\FileComparison.txt) DO @echo %%3>C:\temp\DiffPID.txt

FINDSTR "FC: no differences encountered" c:\temp\FileComparison.txt
IF '%ERRORLEVEL%'=='0' del C:\temp\FileComparison.txt & echo.No PID Found
IF NOT '%ERRORLEVEL%'=='0'  type c:\temp\FileComparison.txt

pause
exit

Дайте мне знать, если это поможет ...

0 голосов
/ 20 января 2011

Если у вас есть опыт программирования, вы можете создать собственное консольное приложение, которое принимает параметры командной строки и передает их в функцию Win32 API CreateProcess().Одним из выходных значений является идентификатор порожденного процесса, который затем может вернуть ваше приложение.Затем просто обновите пакетный файл, чтобы он вызывал ваше приложение, вместо того, чтобы использовать START напрямую.

0 голосов
/ 09 февраля 2012

Я пытаюсь сделать то же самое.Хотя должен быть какой-то способ сделать это, но весь мой поиск в Google предлагает нет.

Проверьте robvanderwoude.com , чтобы увидеть список сторонних инструментов и примеров.Также ознакомьтесь с полным списком утилит процесса Sysinternal здесь .

0 голосов
/ 20 января 2011

Это просто идея, чтобы вы могли быть в пути

есть команда под названием Tasklist

есть переключатель с именем filter / FI, с помощью которого вы можете решить, какие параметры фильтра вы хотите вывести, например, PID. Выведите это в> 1.TXT

начать процесс

перепроверить список наблюдения и вывести его в 2.TXT

Тогда вам придется проявить творческий подход. Сравни с 1 по 2, возможно удалить процессы в 1 из 2.TXT Остался PID - это то, что вы хотели?

...