标题: [文件操作] 关于批处理等待运行,start /wait [打印本页]
作者: semiuel 时间: 5 天前 11:51 标题: 关于批处理等待运行,start /wait
想写一个简单的批处理,先判断是不是安装了某画报软件,卸载这个软件,卸载完后删除目录,再创建目录并设置权限不让文件写入。
然后就写了以下脚本。- if exist "%APPDATA%\360huabao\360huabao.exe" (
- start /wait "" "%APPDATA%\360huabao\uninstall.exe.lnk"
- )
- ping -n 3 127.0.0.1 >nul 2>nul
- rd /s/q "%APPDATA%\360huabao" >nul 2>nul
- md "%APPDATA%\360huabao" >nul 2>nul
- icacls "%APPDATA%\360huabao" /deny Everyone:W >nul 2>nul
复制代码
但是运行时发现没等卸载程序运行就已经把目录删掉了。
该怎么修改才能先卸载再删目录?
卸载软件运行的uninstall.exe.lnk只是一个快捷方式,指向一个以版本号命名的子目录里的360huabaosetup.exe,并带参数。
不同电脑安装的版本号可能不一样,用dir/ad获取?
uninstall.exe.lnk运行后进程就结束了,是不是start /wait就已经结束了?
作者: flashercs 时间: 5 天前 12:58
找到360huabao的卸载参数并执行,在注册表uninstall
作者: czjt1234 时间: 5 天前 14:13
第二行不要 .lnk 就用 .exe 带参数试试
作者: semiuel 时间: 5 天前 16:32
本帖最后由 semiuel 于 2025-1-5 10:55 编辑
特意找了一台电脑安装了这个软件。
在注册表里找到了卸载的命令和参数。
然后发现一个问题:
假设软件目录是%soft%,卸载命令是360huabaosetup.exe,参数是/uninstall:byuser- @echo off
- start /wait "" "%soft%\360huabaosetup.exe /uninstall:byuser"
- echo Done!
- pause
复制代码
运行这段脚本会报错“Windows找不到文件”,start把命令+参数当成一个文件名了。- @echo off
- start /wait "" "%soft%\360huabaosetup.exe“ /uninstall:byuser
- echo Done!
- pause
复制代码
把参数放在引号外面,或者参数也单独用引号包起来,可以正常调用卸载程序,但脚本并没有等待卸载完成就运行了echo Done!- @echo off
- start /wait "" "%soft%\360huabaosetup.exe"
- echo Done!
- pause
复制代码
不带参数运行确实会等待程序执行完毕才运行echo Done!,但不带参数不能卸载这个软件。
难道是start /wait不能带参数运行?
作者: semiuel 时间: 3 天前 10:56
论坛大佬们,有没有什么好办法解决这个问题?
作者: 77七 时间: 3 天前 12:51
利用 卸载程序会删除自身,辅助判断下是否完成卸载- @echo off
- for /f "delims=" %%i in ('dir /b /s /ad "%APPDATA%\?360huabao"') do (
- for /f "delims=" %%j in ('dir /b /s /a-d "%%i\360huabaosetup.exe"') do (
- "%%j" "/uninstall:byuser"
- for /l %%l in ( ) do (
- if not exist "%%j" (
- timeout 3 /nobreak
- rd /s /q "%%i"
- md "%%i"
- icacls "%%i" /deny Everyone:W
- goto :next
- ) else (
- timeout 1
- )
- )
- )
- )
- :next
- pause
复制代码
作者: aloha20200628 时间: 3 天前 13:06
回复 5# semiuel
试试》不用 start 启运卸载程序,直接在命令行完成...- @echo off & cd /d "%soft%" &360huabaosetup.exe /uninstall:byuser
- echo,Done!&pause&exit/b
复制代码
作者: semiuel 时间: 3 天前 15:35
回复 6# 77七
好的,谢谢大佬,我试试看。
作者: semiuel 时间: 3 天前 15:37
回复 7# aloha20200628
谢谢大佬,我的目的很简单,卸载已有的软件,然后目录设置权限不让再次安装。
作者: aloha20200628 时间: 3 天前 16:38
回复 9# semiuel
网查了一遍关键词 360huabao.exe,似乎楼主可能碰上 ‘硬茬’ 了,这是360组件之一,如不清根它会自动安装,网上有各种解法...
作者: semiuel 时间: 3 天前 17:03
我发现给360huabao目录设置权限后有些时候它也能装进去。
作者: /zhqsystem/zhq 时间: 昨天 18:21
本帖最后由 /zhqsystem/zhq 于 2025-1-7 18:28 编辑
Reg.exe Query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved"
看看这个注册表有没有,有的话判断注册表就行了这东西原理就是安装的反向卸载,
结束进程,反注册dll,删除注册表保护机制包含服务,二次结束进程,删除文件,写入权限和数字证书签名注册表拦截(安装后的电脑,数字签名拦截会失败)
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |