使用wmic查找是否存在产品


2

我正在寻找一个批处理文件来检查程序是否存在,如果它存在,我想将其卸载。这是我到目前为止所得到的。

 @echo off
 (wmic product get name| findstr /i "abc123")

它并不多,但基本上如果它找到“abc123”我想要它运行运行卸载它。到目前为止,这就是我所拥有的。

 wmic product where name="abc123" call uninstall/nointeractive

我不确定如何为激活第二组代码的第一组代码设置'if true'类型的语句。

任何回复为'false'的程序,程序基本上都会跳过卸载。

如果您有任何疑问,请随时提出。谢谢!

Answers:


4

选择任何:

阅读如何 FINDSTR 将设定 ERRORLEVEL

@ECHO OFF
SETLOCAL EnableExtensions
set "_product=abc123"
rem set "_product=avg zen"

echo 'redirection' way
(wmic product get name| findstr /i /C:"%_product%")&&(
    echo %_product% exists
    rem uninstall here
  )||(
    echo %_product% no instance
  )

echo 'if errorlevel' way
wmic product get name| findstr /i /C:"%_product%"
if errorlevel 1 (
  echo %_product% no instance
) else (
  echo %_product% exists
  rem uninstall here
)

echo 'direct call' way
wmic product where "name='%_product%'" call uninstall/nointeractive

输出为 set "_product=abc123"

==> D:\bat\SU\1087355.bat
'redirection' way
abc123 no instance
'if errorlevel' way
abc123 no instance
'direct call' way
No Instance(s) Available.

输出为 set "_product=avg zen" 但随着 '直接呼叫'的方式 跳过:

==> D:\bat\SU\1087355.bat
'redirection' way
AVG Zen
avg zen exists
'if errorlevel' way
AVG Zen
avg zen exists

基于子串匹配,是否没有直接的方法向wmic询问它所知道的所有产品?在已经使用一年或两年的计算机上执行完整列表需要相当长的时间,所以如果有办法避免它首先通过 整个 已安装的程序列表,可以轻松减少30秒的等待时间。
Mike 'Pomax' Kamermans
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.