我正在尝试找到一种方法来从命令提示符中获取我自己的 PID(以便稍后在 bat 脚本中使用)。
到目前为止我发现的唯一有用的方法是getpids.exe
从这里使用:http://www.scheibli.com/projects/getpids/index.html,但我正在寻找 Windows“内置”的命令。
我正在寻找一种“万无一失”的方法。不要假设我的进程是唯一的 cmd.exe 或任何其他东西。
答案1
由于其他解决方案都不是万无一失且内置的,因此我认为我会提供以下解决方案,但请注意,您需要以某种方式解析/保存结果:
title mycmd
tasklist /v /fo csv | findstr /i "mycmd"
答案2
扩展 Tony Roth 的回答:
title uniqueTitle
for /f "tokens=2 USEBACKQ" %f IN (`tasklist /NH /FI "WINDOWTITLE eq uniqueTitle*"`) Do echo %f
使用 WINDOWTITLE 过滤器可以避免使用管道,因此您可以将其放在 for 循环中,并使用 SET 将其分配给变量(如果您愿意):
title uniqueTitle
for /f "tokens=2 USEBACKQ" %f IN (`tasklist /NH /FI "WINDOWTITLE eq uniqueTitle*"`) Do set ourPID=%f
删除/v
可使其更快,而 可/NH
摆脱标题行。您需要后面的通配符,"uniqueTitle"
因为窗口标题实际上包含当前命令(因此如果您尝试完全匹配它,它会一直持续下去)。
答案3
使用 PowerShell + WMI:
powershell (Get-WmiObject Win32_Process -Filter ProcessId=$PID).ParentProcessId
使用 WMIC:
for /f %a in ('wmic os get LocalDateTime ^| findstr [0-9]') do set NOW=%a
wmic process where "Name='wmic.exe' and CreationDate > '%NOW%'" get ParentProcessId | findstr [0-9]
(与往常一样,在批处理文件中%
使用双重符号)for
答案4
- Windows 任务管理器,您需要转到查看 -> 选择列..然后选择 PID。
- “tasklist /v”在命令提示符中获取详细的任务信息。
- 进程浏览器live.sysinternals.com。