Windows批处理文件:最后一个进程的PID是什么?

8
我正在从批处理文件中启动浏览器。
START "www.google.com"

我想知道这个浏览器窗口的PID是多少。
在一台计算机上可能会启动许多浏览器窗口。我需要找到由我的批处理文件启动的进程的PID。我尝试使用WINDOWTITLE过滤器,但这不是一个好主意,因为标题可能会在未来更改。我正在使用Windows XP/7操作系统。
任何帮助将不胜感激。 谢谢。

“START”命令如何打开浏览器窗口? 根据文档,START “title”将以指定的标题打开一个新的控制台窗口。 - Andrei Pana
对不起,必须是 START "title" "www.google.com"。 - beginner_prithvi
认为这篇文章应该发布在Super User上。 - Codebling
我正在寻找这个解决方案。我想打开一个浏览器,运行一个iMacros脚本,然后再关闭它。我可以使用'taskkill /im firefox',但显然这可能很危险!如果“start”能够返回一个PID,那么我就可以使用它。 - Jon H
2
"start" 不保证会启动一个新进程。许多网络浏览器只会在新标签页中打开页面,如果你删除该进程,所有标签页都将被关闭,而不仅仅是你打开的那个。 - Raymond Chen
5个回答

3

就算这个问题已经超过两年了,以下代码仍然有效,只需要根据默认浏览器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%

`pid=!pid:"=!' 的意思是什么?我收到了“'pid' 不是内部或外部命令,也不是可运行的程序或批处理文件。”的错误提示。 - sdbbs

0

这只是一个想法,也许可以帮助你入门

有一个叫做Tasklist的命令

有一个叫做filter /FI的开关,它可以让您决定要输出哪些过滤参数,例如PID。将其输出到1.TXT中

启动您的进程

重新检查监视列表并输出到2.TXT

然后您需要有创意。比较1和2,也许从2.TXT中删除1中的进程,剩下的PID就是您想要的?


0
如果您有一些编程经验,您可以创建自己的控制台应用程序,接受命令行参数并将它们传递给Win32 API CreateProcess() 函数。其中一个输出值是生成的进程ID,您的应用程序可以将其返回。然后只需更新批处理文件,调用您的应用程序而不是直接使用START即可。

0

我也在尝试做同样的事情。虽然肯定有方法可以实现,但我的所有谷歌搜索都表明没有。

请查看robvanderwoude.com以查看第三方工具和示例列表。还可以在这里查看Sysinternal的完整进程实用程序列表。


0

我已经花了大约两个小时来研究这个问题,我认为有一种方法可以解决,但需要更深入地了解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

如果这有帮助,请告诉我...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接