gpt4 book ai didi

batch-file - 在批处理文件中,如何抑制 FOR/F 命令中的命令的输出

转载 作者:行者123 更新时间:2023-12-04 07:53:33 26 4
gpt4 key购买 nike

以下是批处理文件片段的示例:

@echo off

for /f "tokens=1" %%a in ('wmic process where "Caption = 'notepad++.exe'" get Processid ^| findstr /r "[0-9]"') do (
set procid=%%a
)

echo Notepad++ process ID is %procid%

pause
在其中,我使用 WMIC 获取 Notepad++ 的进程 ID , 使用 findstr 提取实际数字然后使用 FOR /F命令将结果设置为变量以供进一步使用。也许不是最优雅的方式,但它对我有用。
当 Notepad++ 正在运行并且 WIMC 找到它的进程时,这工作得很好,我得到如下结果:
Notepad++ process ID is 222648
Press any key to continue . . .
但是,如果 Notepad++ 未运行,结果如下所示:
No Instance(s) Available.
Notepad++ process ID is
Press any key to continue . . .
No Instance(s) Available.部分是来自 WMIC 的消息,这让我感到困扰。我不希望它打印在屏幕上。
在命令提示符中单独使用命令时,我可以通过添加 2>&1 来抑制此消息。在 WMIC 部分结束时,如下所示:
wmic process where "Caption = 'notepad++.exe'" get Processid 2>&1 | findstr /r "[0-9]"
但是,当我尝试在这样的批处理文件中执行类似操作时:
@echo off

for /f "tokens=1" %%a in ('wmic process where "Caption = 'notepad++.exe'" get Processid 2>&1 ^| findstr /r "[0-9]"') do (
set procid=%%a
)

echo Notepad++ process ID is %procid%

pause
批处理文件只是崩溃。
我在这里做错了什么?在这种情况下,抑制 WMIC 输出的正确方法是什么?
谢谢。

最佳答案

感谢@Squashman 和@Compo 的建议,我能够修复崩溃并稍微整理一下整个事情。现在的最终变体如下:

@echo off

for /f "tokens=2 delims==" %%a in ('wmic process where "Caption = 'notepad++.exe'" get Processid /value 2^>NUL') do (
set procid=%%a
)

echo Notepad++ process ID is %procid%

pause
2>&1已更改为 2^>NUL ( >^ 转义),也感谢 /value切换为 WMIC它的输出现在可以通过 FOR /F 直接解析无需 findstr

关于batch-file - 在批处理文件中,如何抑制 FOR/F 命令中的命令的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66821898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com