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

[文件操作] 关于批处理等待运行,start /wait

想写一个简单的批处理,先判断是不是安装了某画报软件,卸载这个软件,卸载完后删除目录,再创建目录并设置权限不让文件写入。
然后就写了以下脚本。
  1. if exist "%APPDATA%\360huabao\360huabao.exe" (
  2. start /wait "" "%APPDATA%\360huabao\uninstall.exe.lnk"
  3. )
  4. ping -n 3 127.0.0.1 >nul 2>nul
  5. rd /s/q "%APPDATA%\360huabao" >nul 2>nul
  6. md "%APPDATA%\360huabao" >nul 2>nul
  7. icacls "%APPDATA%\360huabao" /deny Everyone:W >nul 2>nul
复制代码
但是运行时发现没等卸载程序运行就已经把目录删掉了。
该怎么修改才能先卸载再删目录?

卸载软件运行的uninstall.exe.lnk只是一个快捷方式,指向一个以版本号命名的子目录里的360huabaosetup.exe,并带参数。
不同电脑安装的版本号可能不一样,用dir/ad获取?

uninstall.exe.lnk运行后进程就结束了,是不是start /wait就已经结束了?

找到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

利用 卸载程序会删除自身,辅助判断下是否完成卸载
  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
复制代码
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

返回列表