经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Windows » 查看文章
Window平台下的静默下载并安装软件脚本bat
来源:cnblogs  作者:熊仔其人  时间:2019/8/2 8:51:12  对本文有异议

一,隐藏命令窗口

    当我们运行bat脚本的时候,弹出CMD窗口。如果要隐藏窗口可以在bat脚本开头处写一下代码:

  1. @echo off
  2. if "%1" == "h" goto begin
  3. mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
  4. :begin
  5. REM

 

二,以管理员身份运行 

    如何始终以管理员身份运行bat文件?
其实很简单,只需要新建一个bat文件,填入以下代码后运行即可:

  1. @echo off
  2. >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
  3. if '%errorlevel%' NEQ '0' (
  4. goto UACPrompt
  5. ) else ( goto gotAdmin )
  6. :UACPrompt
  7. echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
  8. echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
  9. "%temp%\getadmin.vbs"
  10. exit /B
  11. :gotAdmin
  12. if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
  13.  
  14. ::下面写你的脚本

 

三,下载功能

    调用Download Wscript.Arguments的vbs脚本来实现下载

  1. @echo off & title Bat+Vbs 下载器 By 熊仔其人
  2. ::设置要下载的文件链接,仅支持http协议。必写项。
  3. set Url=https://wdl1.cache.wps.cn/wps/download/W.P.S.8919.12012.2019.exe
  4. ::设置文件保存目录,若下载至当前目录,请留空
  5. set Save=D:\document
  6. if exist %Save% (echo 位置:%Save%) else (mkdir %Save% & echo 已创建:%Save%)
  7. for %%a in ("%Url%") do set "FileName=%%~nxa"
  8. if not defined Save set "Save=%cd%"
  9. (echo Download Wscript.Arguments^(0^),Wscript.Arguments^(1^)
  10. echo Sub Download^(url,target^)
  11. echo Const adTypeBinary = 1
  12. echo Const adSaveCreateOverWrite = 2
  13. echo Dim http,ado
  14. echo Set http = CreateObject^("Msxml2.ServerXMLHTTP"^)
  15. echo http.open "GET",url,False
  16. echo http.send
  17. echo Set ado = createobject^("Adodb.Stream"^)
  18. echo ado.Type = adTypeBinary
  19. echo ado.Open
  20. echo ado.Write http.responseBody
  21. echo ado.SaveToFile target
  22. echo ado.Close
  23. echo End Sub)>DownloadFile.vbs
  24. DownloadFile.vbs "%Url%" "%Save%\%FileName%"
  25. ::下载完删除生成的vbs文件
  26. del DownloadFile.vbs

 

四,静默安装

    静默安装软件

1.installshield型:

installshield是一款商业级别的安装程序封装工具,许多大型商业软件都用它进行封装.例如:macromedia flash. pgtoshop等
安装参数:-R 用于记录安装过程
-s 用于进行软件的自动安装
-f1 指定setup.iss应答文件的路径
使用方法:

1).先用在命令行下用-R参数进行软件的安装,其安装过程与正常安装没有本质的区别,但在软件安装结束后可以在 c:\windows(winxp系统)或c:\winnt(win2k系统)目录下找到一个名为setup.iss的文件,它就是我们后面要用到的可以进行自动安装的重要应答文件.

2).将以上的setup.iss文件与你的安装程序放在同一目录下,利用-s参数进行全自动安装.

例如: start /wait x:\phtoshop\setup.exe -s -f1 "y:\setup.iss"(如果setup.iss文件与安装程序在同一目录,可以省去-f1参数)


2.Inno setup 类型:

Inno setup 是一款完全免费的安装程序封装工具,其功能和稳定性均可与商业封装工具媲美.

安装参数: /silent(/verysilent) 用于软件的自动安装
sp- 用于跳过安装程序的确认界面
使用方法: start /wait x:\thunder5.exe /verysilent sp-
说明:此安装参数的使用比较容易,但如果我们把它写入到批处理文件中进行大量的软件安装时,有的软件会在安装完成后自行启动,比如迅雷,为不影响系统性能,我们可以结合其他的命令终止其进程,例如:
复制代码 代码如下:
@echo off
start /wait x:\thunder5.exe /verysilent sp-
echo.
taskkill.exe /F /IM Thunder5.exe

3.Microsoft Windows Installer技术打包程序

微软自家产品,许多软件生产厂家现在都选择这种基于微软开发的封装方式
参数:/ /QB(/QN)用于自动安装软件
/REBOOT=suppress 安装后不重起
使用方法: start /wait x:\setup.exe /QB REBOOT=Suppress

4.Nullsoft SuperRMP Install System (NSIS)类型,例如:winamp
使用参数: /S 用于自动安装软件
例如: x:\winamp\setup.exe /S
说明:此类软件安装后会给出一个文件关联确认窗口,目前无法跳过,但我可以给大家一个思路,就是结合VBS脚本中的Doskey命令来模仿键盘动作实现确认过程,到现在为止我个人还没有写出来,望高手帮忙完善

二.测试方法与安装类型分析:

1.测试方法:可以用目前比较流行的虚拟机进行测试
2.安装类型分析:大部分安装程序可以通过鼠标右击安装程序___选择属性 ________版本来查看其封装类

 

五,Windows启动目录

Windows启动目录

  1. WinXP: C:/Documents and Settings/Administrator/「开始」菜单/程序/启动
  2. Win7: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  3. Win10: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  4. 所有用户通用启动目录: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

总结上面的知识点,写成几个demo:

示例一:

  1. @echo off
  2. if "%1" == "h" goto begin
  3. mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
  4. :begin
  5. @echo off & WPS下载器
  6. ::设置要下载的文件链接,仅支持http协议。必写项。
  7. set Url=https://wdl1.cache.wps.cn/wps/download/W.P.S.8919.12012.2019.exe
  8. ::设置文件保存目录,若下载至当前目录,请留空
  9. set Save=D:\document
  10. if exist %Save% (echo 位置:%Save%) else (mkdir %Save% & echo 已创建:%Save%)
  11.  
  12. for %%a in ("%Url%") do set "FileName=%%~nxa"
  13. if not defined Save set "Save=%cd%"
  14. (echo Download Wscript.Arguments^(0^),Wscript.Arguments^(1^)
  15. echo Sub Download^(url,target^)
  16. echo Const adTypeBinary = 1
  17. echo Const adSaveCreateOverWrite = 2
  18. echo Dim http,ado
  19. echo Set http = CreateObject^("Msxml2.ServerXMLHTTP"^)
  20. echo http.open "GET",url,False
  21. echo http.send
  22. echo Set ado = createobject^("Adodb.Stream"^)
  23. echo ado.Type = adTypeBinary
  24. echo ado.Open
  25. echo ado.Write http.responseBody
  26. echo ado.SaveToFile target
  27. echo ado.Close
  28. echo End Sub)>DownloadFile.vbs
  29. DownloadFile.vbs "%Url%" "%Save%\%FileName%"
  30. del DownloadFile.vbs
  31. if exist "%Save%\%FileName%" (echo 位置:"%Save%\%FileName%" & start /wait "" "%Save%\%FileName%" /QB REBOOT=Suppress & pause >nul ) else (echo "%Save%\%FileName%"文件不存在)

新建记事本,复制代码粘贴到记事本,保存为“静默下载并安装.bat”

 

示例二:

  1. :: 熊仔其人,始终以管理员身份运行
  2. @echo off
  3. >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
  4. if '%errorlevel%' NEQ '0' (
  5. goto UACPrompt
  6. ) else ( goto gotAdmin )
  7. :UACPrompt
  8. echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
  9. echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
  10. "%temp%\getadmin.vbs"
  11. exit /B
  12. :gotAdmin
  13. if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
  14.  
  15. @echo off & WPS下载器
  16. ::设置要下载的文件链接,仅支持http协议。必写项。
  17. set Url=https://wdl1.cache.wps.cn/wps/download/W.P.S.8919.12012.2019.exe
  18. ::设置文件保存目录,若下载至当前目录,请留空
  19. set Save=C:if exist %Save% (echo 位置:%Save%) else (mkdir %Save% & echo 已创建:%Save%)
  20.  
  21. for %%a in ("%Url%") do set "FileName=%%~nxa"
  22. if not defined Save set "Save=%cd%"
  23. (if exist "%Save%\%FileName%" (goto beginInstall)
  24. echo Download Wscript.Arguments^(0^),Wscript.Arguments^(1^)
  25. echo Sub Download^(url,target^)
  26. echo Const adTypeBinary = 1
  27. echo Const adSaveCreateOverWrite = 2
  28. echo Dim http,ado
  29. echo Set http = CreateObject^("Msxml2.ServerXMLHTTP"^)
  30. echo http.open "GET",url,False
  31. echo http.send
  32. echo Set ado = createobject^("Adodb.Stream"^)
  33. echo ado.Type = adTypeBinary
  34. echo ado.Open
  35. echo ado.Write http.responseBody
  36. echo ado.SaveToFile target
  37. echo ado.Close
  38. echo End Sub)>DownloadFile.vbs
  39. if exist "%Save%\%FileName%" (echo 位置:%Save%\%FileName% & goto beginInstall) else (echo 下载:%FileName% 请等待)
  40. DownloadFile.vbs "%Url%" "%Save%\%FileName%"
  41. ::del DownloadFile.vbs
  42.  
  43. :beginInstall
  44. del DownloadFile.vbs
  45. if exist "%Save%\%FileName%" (echo 安装:%Save%\%FileName% 请稍等,可能需要您手动确认安装 & start /wait "" "%Save%\%FileName%" /verysilent sp- & exit ) else (echo 异常:%Save%\%FileName% 文件不存在或被损坏!)

 

与上一个脚本不同的是,如果这一个脚本会覆盖旧文件,即下载目录下存在已下载过的同名文件会覆盖,因此该脚本可以重复执行。执行成功后自动退出。

示例三:

  1. :: 熊仔其人,始终以管理员身份运行
  2. @echo off
  3. if "%1" == "h" goto begin
  4. mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
  5. :begin
  6. REM
  7.  
  8. @echo off
  9. >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
  10. if '%errorlevel%' NEQ '0' (
  11. goto UACPrompt
  12. ) else ( goto gotAdmin )
  13. :UACPrompt
  14. echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
  15. echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
  16. "%temp%\getadmin.vbs"
  17. exit /B
  18. :gotAdmin
  19. if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
  20.  
  21. @echo off & WPS下载器
  22. ::设置要下载的文件链接,仅支持http协议。必写项。
  23. set Url=https://wdl1.cache.wps.cn/wps/download/W.P.S.8919.12012.2019.exe
  24. ::设置文件保存目录,若下载至当前目录,请留空
  25. set Save=C:if exist %Save% (echo 位置:%Save%) else (mkdir %Save% & echo 已创建:%Save%)
  26.  
  27. for %%a in ("%Url%") do set "FileName=%%~nxa"
  28. if not defined Save set "Save=%cd%"
  29. (if exist "%Save%\%FileName%" (goto beginInstall)
  30. echo Download Wscript.Arguments^(0^),Wscript.Arguments^(1^)
  31. echo Sub Download^(url,target^)
  32. echo Const adTypeBinary = 1
  33. echo Const adSaveCreateOverWrite = 2
  34. echo Dim http,ado
  35. echo Set http = CreateObject^("Msxml2.ServerXMLHTTP"^)
  36. echo http.open "GET",url,False
  37. echo http.send
  38. echo Set ado = createobject^("Adodb.Stream"^)
  39. echo ado.Type = adTypeBinary
  40. echo ado.Open
  41. echo ado.Write http.responseBody
  42. echo ado.SaveToFile target
  43. echo ado.Close
  44. echo End Sub)>DownloadFile.vbs
  45. if exist "%Save%\%FileName%" (echo 位置:%Save%\%FileName% & goto beginInstall) else (echo 下载:%FileName% 请等待)
  46. DownloadFile.vbs "%Url%" "%Save%\%FileName%"
  47. ::del DownloadFile.vbs
  48.  
  49. :beginInstall
  50. del DownloadFile.vbs
  51. if exist "%Save%\%FileName%" (echo 安装:%Save%\%FileName% 请稍等,可能需要您手动确认安装 & start /wait "" "%Save%\%FileName%" /verysilent sp- & exit ) else (echo 异常:%Save%\%FileName% 文件不存在或被损坏!)

 

在前面两个案例的基础上,增加了隐藏命令窗口的功能,即执行脚本的过程对于用户来说不可见。不过双击执行的时候窗口还是会闪一下。

 

原文链接:http://www.cnblogs.com/xiongzaiqiren/p/11268615.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号