WMICコマンドの「インスタンスが見つかりません」をバッチで処理する方法


1

バッチで、プロセスのすべてのインスタンスを終了します。私は使用してみました:

@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行下にスクロールさせたくない

どうやってするか ??

回答:


0

「使用可能なインスタンスがありません」というメッセージを表示したくない。

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のインスタンスごとにディスプレイを1行下にスクロールさせたくない

 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

参考文献

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.