我似乎在清理批处理脚本的卸载部分遇到了障碍。我知道实际的命令是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
不兼容,但我有点怀疑。任何帮助都是感激的。
1条答案
按热度按时间fjnneemd1#
这里的问题是查询必须是单个参数。因为在
NOT
和name=%pl%
之间有一个空格,所以必须将整个查询用双引号括起来,否则它将被视为 two 参数。这就是为什么你会得到这个错误--因为WMIC认为NOT
是查询,而name
则会是一个像get
这样的动词,跟在where子句后面。字符串
以防您遇到另一个错误,说明它是一个无效的查询:在这种情况下,问题是您正在比较的名称字符串(在
pl
变量中)没有用单引号括起来-您可以像这样解决这个问题:型
(Note:除了
NOT name='%pl%'
,你也可以使用name<>'%pl%'
,但是引号仍然是必需的,这次不是因为空格,而是因为<
和>
对shell有特殊的意义。