![从批处理文件运行时,wmic 输出为空,但从 cmd 运行时包含信息](https://linux22.com/image/1563648/%E4%BB%8E%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E8%BF%90%E8%A1%8C%E6%97%B6%EF%BC%8Cwmic%20%E8%BE%93%E5%87%BA%E4%B8%BA%E7%A9%BA%EF%BC%8C%E4%BD%86%E4%BB%8E%20cmd%20%E8%BF%90%E8%A1%8C%E6%97%B6%E5%8C%85%E5%90%AB%E4%BF%A1%E6%81%AF.png)
我有这个 wmic 命令,它可以找出我的进程的 PID,并且可以从 cmd 中正常工作,但是在 bat 文件中执行时拒绝产生输出:
wmic /output:process.pid process where (Name like '%java%' and commandLine like '%part-of-the-path%') get ProcessId
当我从 cmd 运行它时,它会生成一个包含
ProcessId
19352
信息后面是两行空白行。当我从批处理文件运行它时,它只生成一个包含两行空白行的文件。
我尝试了和/output:filename
,结果都一样。> filename
| more > filename
这是为什么?如何使命令从批处理中产生输出?
答案1
与大多数编程语言一样,批处理文件也有转义字符。%
命令行中使用的符号是批处理文件中的转义字符,它赋予命令不同的含义。它实际上是在寻找一个名为的变量%java%
。
要解决此问题,请在批处理文件中使用%%
而不是。要查看有关其他转义字符的更多详细信息和信息,请查看%
这里。
以下命令应该在批处理文件中运行。
wmic /output:process.pid process where (Name like '%%java%%' and commandLine like '%%part-of-the-path%%') get ProcessId