[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

想写一个简单的批处理,先判断是不是安装了某画报软件,卸载这个软件,卸载完后删除目录,再创建目录并设置权限不让文件写入。

之前尝试用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
复制代码

找到360huabao的卸载参数并执行,在注册表uninstall
微信:flashercs
QQ:49908356

TOP

第二行不要 .lnk 就用 .exe 带参数试试

QQ 20147578

TOP

本帖最后由 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不能带参数运行?

TOP

论坛大佬们,有没有什么好办法解决这个问题?

TOP

本帖最后由 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楼
bat小白,请多指教!谢谢!

TOP

回复 5# semiuel

试试》不用 start 启运卸载程序,直接在命令行完成...
  1. @echo off & cd /d "%soft%" &360huabaosetup.exe /uninstall:byuser
  2. echo,Done!&pause&exit/b
复制代码

TOP

回复 6# 77七


    好的,谢谢大佬,我试试看。

TOP

回复 7# aloha20200628


    谢谢大佬,我的目的很简单,卸载已有的软件,然后目录设置权限不让再次安装。

TOP

回复 9# semiuel

网查了一遍关键词 360huabao.exe,似乎楼主可能碰上 ‘硬茬’ 了,这是360组件之一,如不清根它会自动安装,网上有各种解法...

TOP

我发现给360huabao目录设置权限后有些时候它也能装进去。

TOP

本帖最后由 /zhqsystem/zhq 于 2025-1-7 18:28 编辑

Reg.exe Query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved"
看看这个注册表有没有,有的话判断注册表就行了这东西原理就是安装的反向卸载,
结束进程,反注册dll,删除注册表保护机制包含服务,二次结束进程,删除文件,写入权限和数字证书签名注册表拦截(安装后的电脑,数字签名拦截会失败)
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

新修改的脚本在顶楼,贴出来请大神们帮忙修改修改。

TOP

本帖最后由 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楼
bat小白,请多指教!谢谢!

TOP

回复 14# 77七


    大佬,可以帮忙解释一下第三行360huabao前为什么要加一个?吗?

TOP

返回列表