windows “wmic产品调用卸载”(指定条件除外)?

cld4siwp  于 2023-08-07  发布在  Windows
关注(0)|答案(1)|浏览(154)

我似乎在清理批处理脚本的卸载部分遇到了障碍。我知道实际的命令是call uninstall,但我使用get name来尝试,看看WMIC是否正确识别我需要删除的程序。
我有一个来自wmic product get name的程序列表,在新安装的PC上运行,我正在使用它作为基础,并试图卸载列表中没有的所有内容。
这是我目前得到的:

set /p pl=<"%temp%\product-list.txt"
wmic product where NOT name=%pl% call uninstall

字符串
我尝试用get name来测试它,因为我不想实际卸载我的所有实用程序,而我的部门之外的用户不需要,并且似乎有一种语法错误:

C:\WINDOWS\system32>wmic product where NOT name=%pl% get name
name - Invalid alias verb.


我很确定我没有正确地处理代码,我只是不知道正确的方法来实现这一点。也许它是正确的,只是语法与get name不兼容,但我有点怀疑。任何帮助都是感激的。

fjnneemd

fjnneemd1#

这里的问题是查询必须是单个参数。因为在NOTname=%pl%之间有一个空格,所以必须将整个查询用双引号括起来,否则它将被视为 two 参数。这就是为什么你会得到这个错误--因为WMIC认为NOT是查询,而name则会是一个像get这样的动词,跟在where子句后面。

wmic product where "NOT name=%pl%" get name

字符串
以防您遇到另一个错误,说明它是一个无效的查询:在这种情况下,问题是您正在比较的名称字符串(在pl变量中)没有用单引号括起来-您可以像这样解决这个问题:

wmic product where "NOT name='%pl%'" get name


(Note:除了NOT name='%pl%',你也可以使用name<>'%pl%',但是引号仍然是必需的,这次不是因为空格,而是因为<>对shell有特殊的意义。

相关问题