找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28157|回复: 16

[文件操作] 关于360huabao卸载问题,BAT脚本待修改

[复制链接]
发表于 2025-1-3 11:51:44 | 显示全部楼层 |阅读模式
想写一个简单的批处理,先判断是不是安装了某画报软件,卸载这个软件,卸载完后删除目录,再创建目录并设置权限不让文件写入。

之前尝试用start /wait等待卸载命令运行结束后再删除目录,但总是有各种问题。
后来想了一个最笨的方法,用GOTO语句
试了几台电脑都可以正常运行,就是写得太粗糙了,贴出来请大神们帮忙修改修改。
  1. @echo off
  2. mode con: cols=28 lines=5
  3. color 1f
  4. echo 处理中……
  5. if not exist "%APPDATA%\360huabao" goto doo
  6. cd /d "%APPDATA%\360huabao"
  7. for /f "delims=" %%j in ('dir /b /s /a-d "360huabaosetup.exe"') do set exe=%%j
  8. "%exe%" "/uninstall:byuser"
  9. :loop
  10. if not exist %exe% (
  11. ping -n 3 127.0.0.1 >nul 2>nul
  12. :doo
  13. rd /s /q "%APPDATA%\360huabao" >nul 2>nul
  14. md "%APPDATA%\360huabao" >nul 2>nul
  15. icacls "%APPDATA%\360huabao" /deny Everyone:W >nul 2>nul
  16. goto end
  17. ) else (
  18. ping -n 2 127.0.0.1 >nul 2>nul
  19. goto loop
  20. )
  21. :end
  22. echo 完成!
  23. ping -n 3 127.0.0.1 >nul 2>nul
复制代码
发表于 2025-1-3 12:58:00 | 显示全部楼层
找到360huabao的卸载参数并执行,在注册表uninstall
发表于 2025-1-3 14:13:07 | 显示全部楼层
第二行不要 .lnk 就用 .exe 带参数试试
 楼主| 发表于 2025-1-3 16:32:58 | 显示全部楼层
本帖最后由 semiuel 于 2025-1-5 10:55 编辑

特意找了一台电脑安装了这个软件。
在注册表里找到了卸载的命令和参数。
然后发现一个问题:
假设软件目录是%soft%,卸载命令是360huabaosetup.exe,参数是/uninstall:byuser
  1. @echo off
  2. start /wait "" "%soft%\360huabaosetup.exe /uninstall:byuser"
  3. echo Done!
  4. pause
复制代码
运行这段脚本会报错“Windows找不到文件”,start把命令+参数当成一个文件名了。
  1. @echo off
  2. start /wait "" "%soft%\360huabaosetup.exe“ /uninstall:byuser
  3. echo Done!
  4. pause
复制代码
把参数放在引号外面,或者参数也单独用引号包起来,可以正常调用卸载程序,但脚本并没有等待卸载完成就运行了echo Done!
  1. @echo off
  2. start /wait "" "%soft%\360huabaosetup.exe"
  3. echo Done!
  4. pause
复制代码
不带参数运行确实会等待程序执行完毕才运行echo Done!,但不带参数不能卸载这个软件。

难道是start /wait不能带参数运行?
 楼主| 发表于 2025-1-5 10:56:34 | 显示全部楼层
论坛大佬们,有没有什么好办法解决这个问题?
发表于 2025-1-5 12:51:51 | 显示全部楼层
本帖最后由 77七 于 2025-1-13 17:56 编辑

利用 卸载程序会删除自身,辅助判断下是否完成卸载
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /s /ad "%APPDATA%\?360huabao"') do (
  3.         for /f "delims=" %%j in ('dir /b /s /a-d "%%i\360huabaosetup.exe"') do (
  4.                 "%%j" "/uninstall:byuser"
  5.                 for /l %%l in ( ) do (
  6.                         if not exist "%%j" (
  7.                                 timeout 3 /nobreak
  8.                                 rd /s /q "%%i"
  9.                                 md "%%i"
  10.                                 icacls "%%i" /deny Everyone:W
  11.                                 goto :next
  12.                         ) else (
  13.                                 timeout 1
  14.                         )
  15.                 )
  16.         )
  17. )
  18. :next
  19. pause
复制代码

代码有误,见15、16楼
发表于 2025-1-5 13:06:11 | 显示全部楼层
回复 5# semiuel

试试》不用 start 启运卸载程序,直接在命令行完成...

  1. @echo off & cd /d "%soft%" &360huabaosetup.exe /uninstall:byuser
  2. echo,Done!&pause&exit/b
复制代码
 楼主| 发表于 2025-1-5 15:35:04 | 显示全部楼层
回复 6# 77七


    好的,谢谢大佬,我试试看。
 楼主| 发表于 2025-1-5 15:37:06 | 显示全部楼层
回复 7# aloha20200628


    谢谢大佬,我的目的很简单,卸载已有的软件,然后目录设置权限不让再次安装。
发表于 2025-1-5 16:38:40 | 显示全部楼层
回复 9# semiuel

网查了一遍关键词 360huabao.exe,似乎楼主可能碰上 ‘硬茬’ 了,这是360组件之一,如不清根它会自动安装,网上有各种解法...
 楼主| 发表于 2025-1-5 17:03:45 | 显示全部楼层
我发现给360huabao目录设置权限后有些时候它也能装进去。
发表于 2025-1-7 18:21:46 | 显示全部楼层
本帖最后由 /zhqsystem/zhq 于 2025-1-7 18:28 编辑

Reg.exe Query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved"
看看这个注册表有没有,有的话判断注册表就行了这东西原理就是安装的反向卸载,
结束进程,反注册dll,删除注册表保护机制包含服务,二次结束进程,删除文件,写入权限和数字证书签名注册表拦截(安装后的电脑,数字签名拦截会失败)
 楼主| 发表于 2025-1-12 20:24:16 | 显示全部楼层
新修改的脚本在顶楼,贴出来请大神们帮忙修改修改。
发表于 2025-1-13 09:53:47 | 显示全部楼层
本帖最后由 77七 于 2025-1-13 17:57 编辑

标签写在括号内,可能导致闪退?等;代码成熟后再考虑屏蔽不需要的输出,否则不能及时发现错误。

  1. @echo off
  2. set "folder=%APPDATA%\360huabao"
  3. for /f "delims=" %%i in ('2^>nul dir /b /s /ad "%APPDATA%\?360huabao"') do (
  4.         set folder=%%i
  5.         for /f "delims=" %%j in ('2^>nul dir /b /s /a-d "%%i\360huabaosetup.exe"') do (
  6.                 "%%j" "/uninstall:byuser"
  7.                 for /l %%l in ( ) do (
  8.                         if not exist "%%j" (
  9.                                 timeout 3 /nobreak
  10.                                 goto :next
  11.                         ) else (
  12.                                 timeout 1
  13.                         )
  14.                 )
  15.         )
  16. )
  17. :next
  18. rd /s /q "%folder%"
  19. md "%folder%"
  20. icacls "%folder%" /deny Everyone:W
  21. pause
复制代码

代码有误,见15、16楼
 楼主| 发表于 2025-1-13 16:15:06 | 显示全部楼层
回复 14# 77七


    大佬,可以帮忙解释一下第三行360huabao前为什么要加一个?吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 15:15 , Processed in 0.022367 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表