【问题标题】:Batch: check for the PID each second批处理:每秒检查一次 PID
【发布时间】:2017-04-28 14:43:52
【问题描述】:

如果这个进程在任务列表中运行,我需要检查哪个是例如“notebook.exe”的PID,所以我需要每秒检查一次:

如果我在程序运行时运行它,则可以:

echo off
cls
SETLOCAL EnableExtensions
SETLOCAL EnableDelayedExpansion


    for /f "TOKENS=1" %%a in ('wmic PROCESS where "Name='notebook.exe'" get ProcessID ^| findstr [0-9]') do set MyPID=%%a   
        @echo %USERNAME%-%COMPUTERNAME%-%MyPID%

但我需要每秒检查一次。一样但是进入了循环,但是不起作用(MyPID变量为空)

echo off
cls
SETLOCAL EnableExtensions
SETLOCAL EnableDelayedExpansion

for /L %%n in (1,0,10) do (
    for /f "TOKENS=1" %%a in ('wmic PROCESS where "Name='notebook.exe'" get ProcessID ^| findstr [0-9]') do set MyPID=%%a   
        @echo %USERNAME%-%COMPUTERNAME%-%MyPID%
)

有可能吗?

【问题讨论】:

    标签: loops batch-file pid


    【解决方案1】:

    您正在尝试使用在 for 循环中设置的变量。由于批处理是逐行执行的,并且代码块(例如循环)被计为一行,因此这将不起作用,因为批处理将首先将 %MyPID% 扩展为它的值,然后执行整个 for 循环。

    您已经接近解决此问题的方法。使用 Enable DelayedExpansion 是诀窍的一部分。但您还需要在循环内的变量周围使用! 将它们标记为延迟。

    总之,这应该可行:

    @echo off
    cls
    SETLOCAL EnableExtensions
    SETLOCAL EnableDelayedExpansion
    
    for /L %%n in (1,0,10) do (
        for /f "TOKENS=1" %%a in ('wmic PROCESS where "Name='notebook.exe'" get ProcessID ^| findstr [0-9]') do set MyPID=%%a   
            echo %USERNAME%-%COMPUTERNAME%-!MyPID!
    )
    

    但是,请注意,使用标签使批量循环变得更加容易,因此这也可以工作,无需延迟扩展:

    @echo off
    cls
    SETLOCAL EnableExtensions
    
    :loop
    
    for /f "TOKENS=1" %%a in ('wmic PROCESS where "Name='notebook.exe'" get ProcessID ^| findstr [0-9]') do set MyPID=%%a   
    echo %USERNAME%-%COMPUTERNAME%-%MyPID%
    timeout /t 1 /nobreak >nul
    
    goto :loop
    

    timeout /t 1 还确保在返回 :loop 之前等待 1 秒

    【讨论】:

      【解决方案2】:

      最好在 PowerShell 中完成:

      while ($true) {
          Start-Sleep -Seconds 1
          "{0}-{1}-{2}" -f $env:UserName,$env.ComputerName,(Get-Process -Name "Notebook.exe").id
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-15
        • 1970-01-01
        • 2012-12-11
        • 1970-01-01
        • 2014-04-07
        • 1970-01-01
        • 2013-04-24
        • 1970-01-01
        相关资源
        最近更新 更多