我想批量终止某个进程的所有实例。我尝试使用:
@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
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 重定向- 重定向运算符。