如何批量处理WMIC命令“未找到实例”?

如何批量处理WMIC命令“未找到实例”?

我想批量终止某个进程的所有实例。我尝试使用:

@echo off
setlocal EnableDelayedExpansion
for /f "usebackq skip=1" %%r in (`wmic process where Name^="CALC.exe"  get Processid ^| findstr /r /v "^$"`) do SET procid=%%~r
IF [!procid!] NEQ [] (
  wmic process where Name="CALC.exe" call terminate >> NUL
) ELSE (
  GOTO :break
)
:break
SET procid=
endlocal

但是,如果不存在 calc.exe 实例,我不希望显示“没有可用实例”。此外,我不希望显示每个 calc.exe 实例向下滚动一行

怎么做 ??

答案1

我不想显示“没有可用的实例”。

for /f "usebackq skip=1" %%r in (`wmic process where Name^="CALC.exe" get Processid ^| findstr /r /v "^$"`) do SET procid=%%~r

你可以使用重定向运算符丢弃错误2> nul

重定向至 NUL(隐藏错误)

command 2> nul

笔记:

  • 必须>使用 进行转义^
  • null设备是一个特殊文件,它会丢弃写入的所有数据,但报告写入操作成功。

命令for变成:

`wmic process where Name^="CALC.exe" get Processid 2^> nul ^| findstr /r /v "^$"`

此外,我不希望显示在每个 calc.exe 实例上向下滚动一行

 wmic process where Name="CALC.exe" call terminate >> NUL

您可以使用重定向运算符删除多余的空白行> NUL 2>&1

“终止”命令变为:

wmic process where Name="CALC.exe" call terminate >NUL 2>&1

综合起来

修改后的批处理文件:

@echo off
setlocal EnableDelayedExpansion
for /f "usebackq skip=1" %%r in (`wmic process where Name^="CALC.exe" get Processid 2^> nul ^| findstr /r /v "^$"`) do SET procid=%%~r
IF [!procid!] NEQ [] (
  wmic process where Name="CALC.exe" call terminate >NUL 2>&1
) ELSE (
  GOTO :break
)
:break
SET procid=
endlocal

进一步阅读

相关内容