如何获取“wmic process call create”的输出

dcg*_*dcg 3 windows cmd

我正在尝试获取输出,wmic process call create以便我可以获得ProcessId新创建的进程的输出。如果我只是跑:

\n\n
wmic process call create "notepad.exe a.txt","d:\\"\n
Run Code Online (Sandbox Code Playgroud)\n\n

它工作得很好(它打开带有 的a.txt文件夹下的文件)。现在,如果我尝试:d:\\notepad

\n\n
for /f "usebackq delims==; tokens=1,2" %i in (`wmic process call create "notepad.exe a.txt","d:\\"^|findstr ProcessId`) do @echo pid = %j\n
Run Code Online (Sandbox Code Playgroud)\n\n

它没有,并显示错误:

\n\n
\n

格式不正确。\n 建议:<lista_par\xc3\xa1metros> = <par\xc3\xa1metro> [, <lista_par\xc3\xa1metros>]。

\n
\n\n

我真的不知道这里发生了什么,有人可以向我解释一下吗?或者这是否可能?

\n\n

注意:其他命令工作正常。例如,如果我运行:

\n\n
for /f "usebackq" %i in (`wmic process where "executablepath like \'%%notepad.exe\'" get ProcessId /value^|findstr ProcessId`) do @echo OUTPUT: %i\n
Run Code Online (Sandbox Code Playgroud)\n\n

它给出了预期的输出,在本例中为:

\n\n
\n

输出:进程 ID=2084

\n
\n\n

谢谢!

\n

dcg*_*dcg 5

我刚刚发现如何做到这一点。由于该命令只能直接在命令提示符下运行,所以我决定使用cmd /c "...",如下所示:

for /f "usebackq delims==; tokens=1,2" %i in (`cmd /c "wmic process call create 'notepad.exe a.txt','d:\'"^|findstr ProcessId`) do @echo pid = %j
Run Code Online (Sandbox Code Playgroud)

现在唯一的问题是PID需要修剪掉空间,但那是别的东西。很抱歉给您带来不便。

  • 这种方法的关键在于`,`位于一对`""`之间,因此它被传递给由`for /F`字面意思启动的新`cmd`实例,所以这是有效的;在你的原始代码中,需要像“^,”一样转义“,”,就是这样...... (2认同)