我已经创建了一个.cmd脚本,它在特定的软件上运行卸载,如下所示:
Title LEAP Office Accounting Client for 64-Bit Operating Systems
Echo LEAP Office Accounting Client for 64-Bit Operating Systems
WMIC Product Where "Name='LEAP Office Accounting Client for 64-Bit Operating Systems'" Call Uninstall /NoInteractive 这将导致卸载控制面板中的剩余条目,并且我已经将其链接到在调用卸载后仍然保留的注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{7BF4C2E2-96B9-4E84-B0FC-0C084B4068F1}
我可以在脚本中添加什么,以确保通过卸载命令或单独的delete命令将其删除?
注册表项{7BF4C2E2-96B9-4E84-B0FC-0C084B4068F1}的最后一部分是唯一的(GUID)。因此,我需要找到正确的注册表每次,因为脚本是为了删除这个软件不止一次。
发布于 2018-08-06 06:01:28
由于{7BF4C2E2-96B9-4E84-B0FC-0C084B4068F1}是动态的,并且将根据安装进行更改,因此我们可以使用/s /f "Key value data"搜索\Uninstall\目录及其子键,以根据DisplayName的值数据查找键值。要做到这一点,我们可以使用for语句和REG QUERY来设置一个字符串,其中包含键所属的子目录的路径。
要删除密钥,我们需要使用REG DELETE - reg delete /?。
参数/f将删除条目,而不需要确认。
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "tokens=2 delims={}" %%a in ('
REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /s /f "Put your programs DisplayName's value here"
') do REG DELETE "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{%%a}" /f
pause此脚本将根据DisplayName的值移除您的键。您将希望在注册表中搜索此值并将其插入脚本中。确保以管理员身份运行此脚本。
发布于 2018-08-06 09:32:56
@echo off
setlocal
call :del_uninstall_key "LEAP Office Accounting Client for 64-Bit Operating Systems"
exit /b
:del_uninstall_key
setlocal
set "key="
for /f "tokens=*" %%A in ('
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
/s /f "%~1"
^|find "HKEY_LOCAL_MACHINE"
') do if not defined key set "key=%%~A"
if not defined key (
>&2 echo Reg key not found.
exit /b 1
)
reg delete "%key%" /f
exit /b使用displayname值调用标签:del_uninstall_key。reg query搜索值并获取返回文本的第一行,这将是键。使用find将返回的值限制为具有HKEY_LOCAL_MACHINE的值。
如果定义了变量key,则将执行reg delete命令。
使用for /?、reg /?和exit /?进行命令帮助。
发布于 2018-08-06 10:20:24
这里有一个想法,基于这样的假设:您也可以从相同的Win32_Product结果中确定唯一的GUID。
@Echo Off
Set "GUID="
Set "RKEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
Set "PROD=LEAP Office Accounting Client for 64-Bit Operating Systems"
For /F "Tokens=2Delims==}" %%A In ('WMIC Product Where "Name='%PROD%'" Get IdentifyingNumber /Value 2^>Nul') Do Set "GUID=%%A}"
If Not Defined GUID Exit /B
WMIC Product Where "Name='%PROD%'" Call Uninstall
Reg Delete "%RKEY%\InstallShield_%GUID%" /F>Nul不过,我确实认为,如果您正在访问注册表,您可能可以使用该位置的UnistallString值数据卸载该软件。
您甚至可以解析它使用的交换机的数据,还可以选择添加自己的数据,以降低进程的交互性。
https://stackoverflow.com/questions/51700536
复制相似问题