如何在Windows批处理文件中编写pid文件

时间:2010-02-24 19:17:08

标签: windows bash shell batch-file

我正在编写一些Java代码,需要能够在类似Unix的机器上编写pid文件。在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 个答案:

答案 0 :(得分:2)

你可以使用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中执行所有操作)