【发布时间】:2015-03-04 18:21:40
【问题描述】:
这应该很简单,但我没找到。
如果我在 cmd 中运行一些批处理脚本,我如何获取托管 cmd 的进程 ID?
set currentCmdPid= /* some magic */
echo %currentCmdPid%
我找到了很多使用tasklist 和名称过滤的解决方案,但我相信这对我不起作用,因为可以启动许多 cmd 实例。
再次,我想要一些简单优雅且防弹的解决方案。
谢谢。
【问题讨论】:
-
嗯,这并不简单,但我还是认为it is bullet-proof。
-
为什么这在 Windwos 上这么难 :( 这是一件如此简单和常见的事情。
-
如果 cmd 环境通过环境变量暴露给它自己的进程信息会很好,不是吗?无论如何,您获取当前控制台的 PID 的目的是什么?如果您将其用于进程锁定,there are probably better solutions for that.
-
使用dbenham's solution 查找
cmd.exe的PID。它比 npocmaka 或我的更快。 npocmaka 仍然因为将我指向 dbenham's 而获得 +1。 :) 如果您想捕获正在启动的进程的 PID,而不是cmd本身的 PID,see this page。 -
最简单的解决方案是
call :spawn wrapper.bat并将 wrapper.bat 的内容设置为@app.exe >path\to\log.txt。或者你可以硬编码wmic process call create "%args:"=\"% >path\\to\\log.txt"。无论哪种方式,您都必须完全限定c:\path\to\log.txt。我认为wmic process call create使用%systemroot%\system32作为其工作目录。我不确定如何将>作为call参数的一部分而不引用它,所以我无法建议您如何将重定向包含在与call相同的行中。用插入符号转义>似乎对我的测试没有任何影响。
标签: batch-file process cmd echo