求助:获取OpenOffice产品ID并赋值变量以实现静默卸载的问题
解决WMIC获取OpenOffice产品ID并赋值变量失败的问题
我来帮你搞定这个卸载OpenOffice的问题!你的代码里有几个小细节没处理好,导致产品ID没能正确赋值给变量,咱们来一步步修正:
问题分析
- WMIC的输出包含多余的空行和
IdentifyingNumber=前缀,直接赋值会把无效内容也带进去 - 你在
echo Die ID ist %id%里用了%id%,但因为开启了延迟扩展,循环内的变量更新需要用!id!才能实时读取 - WMIC输出的是Unicode格式,偶尔会产生额外的特殊字符,需要过滤
修正后的代码
@echo on & setlocal EnableExtensions EnableDelayedExpansion :: 过滤有效行并提取纯ID值 FOR /F "tokens=2 delims==" %%i IN ('wmic product where "name like 'OpenOffice%%'" get IdentifyingNumber /format:value ^| findstr /r "^IdentifyingNumber"') Do ( Set "id=%%i" :: 去除可能的尾部空格/换行符 Set "id=!id: =!" ) echo Die ID ist !id! pause :: 确认ID有效再执行卸载 if not "!id!"=="" ( msiexec /uninstall !id! /quiet /norestart echo OpenOffice Installation Errorlevel %Errorlevel% ) else ( echo 未找到OpenOffice的产品ID! ) pause endlocal
关键改动说明
- 用
findstr /r "^IdentifyingNumber"过滤掉WMIC输出的空行和无效内容,只保留带产品ID的行 - 通过
tokens=2 delims==直接提取等号后面的纯ID字符串,去掉IdentifyingNumber=前缀 - 增加
Set "id=!id: =!"去除ID可能带有的尾部空格或换行符,避免msiexec识别失败 - 用
if not "!id!"==""做判断,防止ID为空时执行无效的卸载命令 - 循环内的变量读取统一用
!id!,利用延迟扩展获取实时更新的变量值
这样修改后,就能正确获取OpenOffice的产品ID并完成静默卸载了。
内容的提问来源于stack exchange,提问作者JustGo1909
相关产品推荐
相关产品推荐

