返回

如何在 Windows 批处理文件中检索刚启动进程的 PID?

windows

从 Windows 批处理文件中获取刚启动进程的 PID

介绍

在 Windows 批处理脚本中,start 命令可用于启动新进程。当您希望与新进程交互或监控其行为时,获取其进程 ID (PID) 至关重要。本文将探讨几种从批处理文件中检索刚启动进程 PID 的方法。

方法

WMIC 命令

WMIC (Windows Management Instrumentation Command-line) 命令可用于检索系统信息,包括进程信息。以下批处理文件使用 WMIC 获取新进程的 PID:

@echo off
start notepad.exe
for /f "tokens=3" %%a in ('wmic process where name="notepad.exe" get processid') do set pid=%%a
echo PID: %pid%

PowerShell 命令

PowerShell 是一个强大的脚本语言,可用于自动化任务。以下批处理文件使用 PowerShell 获取新进程的 PID:

@echo off
powershell -NoProfile -Command ^
Start-Process notepad.exe -PassThru | ^
ForEach-Object { $_.Id }

VBScript 脚本

VBScript 是一种脚本语言,可用于自动化 Windows 任务。以下批处理文件使用 VBScript 获取新进程的 PID:

@echo off
cscript //nologo //e:jscript "%~f0" "%~1"
var WshShell = WScript.CreateObject("WScript.Shell");
var process = WshShell.Run("%~1");
WScript.StdOut.WriteLine(process.ProcessID);

C++ 代码

C++ 是一种编译语言,可用于创建强大的应用程序。以下 C++ 代码使用 Windows API 函数获取新进程的 PID:

#include <iostream>
#include <Windows.h>

int main() {
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));

    if (!CreateProcess(NULL, TEXT("notepad.exe"), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
        cerr << "无法启动进程!" << endl;
        return 1;
    }

    DWORD pid = pi.dwProcessId;
    cout << "PID: " << pid << endl;

    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    return 0;
}

结论

获取刚启动进程的 PID 在批处理脚本中很常见,可以通过多种方法实现。选择最适合您特定需求的方法。

常见问题解答

  • 我无法从我的脚本中获取 PID。 确保您使用正确的进程名称或路径,并且您具有足够的权限来检索进程信息。
  • 我得到一个错误,说进程不存在。 新进程可能已经终止或其名称不正确。
  • 我需要在进程启动后一段时间获取其 PID。 使用 sleeptimeout 命令在获取 PID 之前等待一段时间。
  • 我如何一次获取多个进程的 PID? 使用 for /f 循环或 WMIC 命令的 list full 选项检索多个进程的 PID。
  • 我如何以不同的方式使用 PID? 您可以在其他批处理命令中使用 PID 来终止、暂停或恢复进程,或获取有关其资源使用情况的信息。