为了构建自动卸载脚本,我一直在努力使用 WMIC 批量获取特定输出。我遇到的问题是,我尝试删除的应用程序的卸载程序是在每个系统上自动生成的 SSID 下创建的(例如:C:\ProgramData{07BFF8FA-C12F-46C7-8239-8EE83E21B5DA}\程序名\Uninstall.exe)。因此,我无法根据注册表构建静态卸载位置,因为卸载程序字符串也位于注册表中的相同 SSID 下。
我尝试了几种不同的方法来提取卸载信息,而我唯一接近的方法是使用 WMIC:
wmic product where "Name like '%product name%'" get name
Run Code Online (Sandbox Code Playgroud)
输出:
Name
<product-name>
Run Code Online (Sandbox Code Playgroud)
^ 和一个额外的回车,那个回车是问题所在。它设置变量,然后清除它。
这是我试图用来让它工作的 for 循环:
@echo off
for /f "skip=1 delims==" %%a in (
'wmic product where "Name like '%product-name%' get name'
) do set PROD=%%a
echo %PROD%
Run Code Online (Sandbox Code Playgroud)
输出:
C:\Users\Administrator>ECHO is off.
Run Code Online (Sandbox Code Playgroud)
这意味着 %PROD% 变量根本没有定义。
如果我使用 @echo ON 运行批处理,我会得到:
:\Users\Administrator>echo <product-name>
<product-name>
:\Users\Administrator>echo
ECHO is on.
Run Code Online (Sandbox Code Playgroud)
请注意,输出缺少驱动器号。这正是我所看到的,所以很奇怪,而且正在设置参数,然后回显然后取消设置。
我也尝试通过文本文件中继来做到这一点:
wmic /OUTPUT:%~dp0\wmic.txt product where "Name like '%product-name%'" get name
for /f …Run Code Online (Sandbox Code Playgroud)