I seem to have hit a road block on the uninstall portion of a cleanup batch script. I know the actual command is call uninstall
but I'm using get name
to try and see if WMIC correctly identifies the programs I need deleted.
I have a list of programs from wmic product get name
run on a freshly installed PC, and I'm using that as a base and trying to make it uninstall everything that is NOT found on the list.
Here's what I've got so far:
set /p pl=<"%temp%\product-list.txt"
wmic product where NOT name=%pl% call uninstall
I try to test it with get name
instead, since I don't want to actually uninstall all of my utilities and such that users outside of my department don't need, and there seems to be a sort of syntax error:
C:\WINDOWS\system32>wmic product where NOT name=%pl% get name
name - Invalid alias verb.
I'm pretty sure I'm approaching the code incorrectly, I just don't know the correct way to achieve this. Perhaps it's correct, just not compatible syntax with get name
, but I somehow doubt it. Any help is appreciated.
The gotcha here is that the query has to be a single argument. Since you have a space there (between NOT
and name=%pl%
), you will have to enclose the whole query in doublequotes, otherwise it will be looked at as two arguments. That's why you get the error - because WMIC thinks that NOT
is the query and name
would then be a verb like get
, following the where clause.
wmic product where "NOT name=%pl%" get name
Just in case you then encounter another error stating it's an invalid query: In this case the issue is that the name string you are comparing with (in the pl
variable) is not enclosed in single quotes - you could fix that like this:
wmic product where "NOT name='%pl%'" get name
(Note: Instead of NOT name='%pl%'
, you could also use name<>'%pl%'
, but the quotes would still be required, this time not because of spaces but because <
and >
would otherwise have special meaning to the shell.)