代码之家  ›  专栏  ›  技术社区  ›  Manfred Moser

如何在windows批处理文件中写入pidfile

  •  0
  • Manfred Moser  · 技术社区  · 14 年前

    我正在编写一些Java代码,这些代码需要能够在类Unix和windows机器上编写pidfile。在unix机器上,我编写了一个bash shell脚本,其中包含如下内容

    command 1>/dev/null 2>&1 &
    echo $! > pidfile
    

    它执行一个命令,将所有输出重定向到nirwana,并将命令放到后台(将其与shell分离)。pidfile包含命令的进程id。然后我可以稍后从文件中读取进程id。一切正常。

    现在在Windows上,我想我应该这样做

    start command
    

    然后以某种方式与Unix方式等效。问题是我无法控制该程序在windows版本中的使用位置或机器上安装的内容。我也没有访问Windows机器进行测试,我在网上找不到任何简单的东西。我知道powershell中有get process函数,但我不知道机器上是否会安装powershell,所以我不能依赖它。

    是否有一些简单的DOS批处理文件命令或语法可以满足我的需要?

    1 回复  |  直到 14 年前
        1
  •  2
  •   ghostdog74    14 年前

    您可以使用vbscript

    Set objFS = CreateObject("Scripting.FileSystemObject")
    Set objArgs = WScript.Arguments
    strProcess = objArgs(0)
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process")
    
    Error = objWMIService.Create(strProcess, null, null, intProcessID)
    If Error = 0 Then
        Wscript.Echo intProcessID 
    Else
        Wscript.Echo Error
    End If
    

    在命令行上,说如果要执行记事本:

    c:\test> cscript //nologo mycreatepid.vbs "notepad.exe"
    3120
    

    您可以使用for循环捕获批处理文件中的返回值。(否则,您可以学习使用vbscript并在vbscript中执行所有操作)