【问题标题】:How to tell if a process is running via batch or script file? [duplicate]如何判断一个进程是通过批处理还是脚本文件运行? [复制]
【发布时间】:2016-12-11 06:30:02
【问题描述】:

如何使用批处理文件判断特定进程是否正在运行?

例如,我如何判断notepad.exe 是否正在运行?

【问题讨论】:

    标签: windows batch-file process


    【解决方案1】:

    Powershell 有一个内置功能。 获取进程 Get-Process 会告诉你所有的进程。如果您希望使用特定的过滤器,请使用:

    Get-Process|?{$_.Name -eq '记事本'}

    截图供参考:

    在 cmd 提示符下输入 Powershell:

    运行上述查询。如果记事本正在运行。它会告诉你:

    希望对你有帮助...

    【讨论】:

    • 在 cmd 提示符下键入第一个 powershell。然后运行上面我粘贴的命令。如果您直接使用 cmd 提示符,则管道将无法工作,因为在管道之后作为输入传递的值是 powershell cmdlet。这就是为什么它没有返回任何东西。
    【解决方案2】:

    考虑以下建议(在您的批处理文件中运行):

    tasklist | findstr /R ^notepad.exe
    

    简单但有效!

    tasklist /?
    

    将向您展示许多用于过滤和管理输出的绝佳选项。

    findstr /?
    

    还将向您展示一组很棒的选项来搜索和过滤tasklist的输出

    我希望这会有所帮助。

    【讨论】:

    • 谢谢!很好的答案,只有一个问题:执行时间需要 10 多秒!有没有办法在更短的时间内做到这一点?
    • 你有很多进程在运行吗?它对我来说运行得非常快......
    • 是的,我倾向于同时运行很多进程。
    • 这可能是原因。我见过tasklist 很慢的情况。我对此没有解决方案。对不起...
    【解决方案3】:

    你可以在批处理文件中做这样的事情:

    这个灵感来自Check if a process is running or not?

    @echo off
    Title Check for running process . . .
    mode con cols=50 lines=3
    set "MyProcess=notepad.exe"
    set delay=5
    :Main
    cls
    Tasklist /FI "IMAGENAME eq %MyProcess%" | find /I "%MyProcess%">nul && (
        echo( & Color 9A
        echo         PROCESS "%MyProcess%" IS RUNNING !
    )||(
        echo( & Color 4C
        echo        PROCESS "%MyProcess%" IS NOT RUNNING !
    )
    Timeout /T %delay% /nobreak>nul
    Goto Main
    

    【讨论】:

      猜你喜欢
      • 2013-05-06
      • 2010-09-23
      • 2011-04-18
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 2023-01-08
      • 1970-01-01
      相关资源
      最近更新 更多