Usando wmic para encontrar si el producto existe

2

Estoy buscando escribir un archivo por lotes que verifique si existe un programa, y ​​si existe, me gustaría tenerlo desinstalado. Esto es lo que tengo hasta ahora.

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

No es mucho, pero básicamente si encuentra "abc123" me gustaría que ejecutara una desinstalación. Esto es lo que tengo para esto hasta ahora.

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

No estoy seguro de cómo establecer un tipo de declaración 'en caso de ser cierto' para el primer conjunto de códigos que activa el segundo conjunto de códigos.

Cualquier cosa que aparezca como "falsa", el programa básicamente omite la desinstalación.

Si tiene alguna pregunta no dude en preguntar. ¡Gracias!

Samuel Pauk
fuente

Respuestas:

4

Elige cualquiera:

Lee como FINDSTR establecerá 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

Salida para 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.

Salida para set "_product=avg zen" pero con vía 'llamada directa' omitido

==> D:\bat\SU\1087355.bat
'redirection' way
AVG Zen
avg zen exists
'if errorlevel' way
AVG Zen
avg zen exists
JosefZ
fuente
¿No hay una forma directa de preguntar a wmic por todos los productos que conoce, basados ​​en una coincidencia de subcadenas? Hacer una lista completa en una computadora que ha estado en uso por un año o dos toma bastante tiempo, así que si hay una manera de evitar que se ejecute primero a través de todo Lista de programas instalados, que fácilmente cortarían una espera de 30 segundos.
Mike 'Pomax' Kamermans