zoukankan      html  css  js  c++  java
  • Window平台下的静默下载并安装软件脚本bat

    一,隐藏命令窗口

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

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

    二,以管理员身份运行 

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

    @echo off
    >nul 2>&1 "%SYSTEMROOT%system32cacls.exe" "%SYSTEMROOT%system32configsystem"
    if '%errorlevel%' NEQ '0' (
    goto UACPrompt
    ) else ( goto gotAdmin )
    :UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%getadmin.vbs"
    "%temp%getadmin.vbs"
    exit /B
    :gotAdmin
    if exist "%temp%getadmin.vbs" ( del "%temp%getadmin.vbs" )
    
    ::下面写你的脚本

    三,下载功能

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

    @echo off & title Bat+Vbs 下载器 By 熊仔其人
     
    ::设置要下载的文件链接,仅支持http协议。必写项。
    set Url=https://wdl1.cache.wps.cn/wps/download/W.P.S.8919.12012.2019.exe
     
    ::设置文件保存目录,若下载至当前目录,请留空
    set Save=D:document
    if exist %Save% (echo 位置:%Save%) else (mkdir %Save% & echo 已创建:%Save%)
     
    for %%a in ("%Url%") do set "FileName=%%~nxa"
    if not defined Save set "Save=%cd%"
    (echo Download Wscript.Arguments^(0^),Wscript.Arguments^(1^)
    echo Sub Download^(url,target^)
    echo   Const adTypeBinary = 1
    echo   Const adSaveCreateOverWrite = 2
    echo   Dim http,ado
    echo   Set http = CreateObject^("Msxml2.ServerXMLHTTP"^)
    echo   http.open "GET",url,False
    echo   http.send
    echo   Set ado = createobject^("Adodb.Stream"^)
    echo   ado.Type = adTypeBinary
    echo   ado.Open
    echo   ado.Write http.responseBody
    echo   ado.SaveToFile target
    echo   ado.Close
    echo End Sub)>DownloadFile.vbs
    
    DownloadFile.vbs "%Url%" "%Save%\%FileName%"
    ::下载完删除生成的vbs文件
    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:phtoshopsetup.exe -s -f1 "y:setup.iss"(如果setup.iss文件与安装程序在同一目录,可以省去-f1参数)


    2.Inno setup 类型:

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

    安装参数: /silent(/verysilent) 用于软件的自动安装
    sp- 用于跳过安装程序的确认界面
    使用方法: start /wait x: hunder5.exe /verysilent sp-
    说明:此安装参数的使用比较容易,但如果我们把它写入到批处理文件中进行大量的软件安装时,有的软件会在安装完成后自行启动,比如迅雷,为不影响系统性能,我们可以结合其他的命令终止其进程,例如:
    复制代码 代码如下:
    @echo off
    start /wait x: hunder5.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:winampsetup.exe /S
    说明:此类软件安装后会给出一个文件关联确认窗口,目前无法跳过,但我可以给大家一个思路,就是结合VBS脚本中的Doskey命令来模仿键盘动作实现确认过程,到现在为止我个人还没有写出来,望高手帮忙完善

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

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

    五,Windows启动目录

    Windows启动目录

    WinXP: C:/Documents and Settings/Administrator/「开始」菜单/程序/启动
    
    Win7: C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup
    
    Win10: C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup
    
    所有用户通用启动目录: C:ProgramDataMicrosoftWindowsStart MenuProgramsStartUp

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

    示例一:

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

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

    示例二:

    :: 熊仔其人,始终以管理员身份运行
    @echo off
    >nul 2>&1 "%SYSTEMROOT%system32cacls.exe" "%SYSTEMROOT%system32configsystem"
    if '%errorlevel%' NEQ '0' (
    goto UACPrompt
    ) else ( goto gotAdmin )
    :UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%getadmin.vbs"
    "%temp%getadmin.vbs"
    exit /B
    :gotAdmin
    if exist "%temp%getadmin.vbs" ( del "%temp%getadmin.vbs" )
    
    @echo off & WPS下载器
     
    ::设置要下载的文件链接,仅支持http协议。必写项。
    set Url=https://wdl1.cache.wps.cn/wps/download/W.P.S.8919.12012.2019.exe
    
    ::设置文件保存目录,若下载至当前目录,请留空
    set Save=C:
    if exist %Save% (echo 位置:%Save%) else (mkdir %Save% & echo 已创建:%Save%)
    
    for %%a in ("%Url%") do set "FileName=%%~nxa"
    if not defined Save set "Save=%cd%"
    (if exist "%Save%\%FileName%" (goto beginInstall)
    echo Download Wscript.Arguments^(0^),Wscript.Arguments^(1^)
    echo Sub Download^(url,target^)
    echo   Const adTypeBinary = 1
    echo   Const adSaveCreateOverWrite = 2
    echo   Dim http,ado
    echo   Set http = CreateObject^("Msxml2.ServerXMLHTTP"^)
    echo   http.open "GET",url,False
    echo   http.send
    echo   Set ado = createobject^("Adodb.Stream"^)
    echo   ado.Type = adTypeBinary
    echo   ado.Open
    echo   ado.Write http.responseBody
    echo   ado.SaveToFile target
    echo   ado.Close
    echo End Sub)>DownloadFile.vbs
    
    if exist "%Save%\%FileName%" (echo 位置:%Save%\%FileName% & goto beginInstall) else (echo 下载:%FileName% 请等待)
    DownloadFile.vbs "%Url%" "%Save%\%FileName%"
    ::del DownloadFile.vbs
    
    :beginInstall
    del DownloadFile.vbs
    if exist "%Save%\%FileName%" (echo 安装:%Save%\%FileName% 请稍等,可能需要您手动确认安装 & start /wait "" "%Save%\%FileName%" /verysilent sp- & exit ) else (echo 异常:%Save%\%FileName% 文件不存在或被损坏!)

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

    示例三:

    :: 熊仔其人,始终以管理员身份运行
    @echo off
    if "%1" == "h" goto begin
    mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
    :begin
    REM
    
    @echo off
    >nul 2>&1 "%SYSTEMROOT%system32cacls.exe" "%SYSTEMROOT%system32configsystem"
    if '%errorlevel%' NEQ '0' (
    goto UACPrompt
    ) else ( goto gotAdmin )
    :UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%getadmin.vbs"
    "%temp%getadmin.vbs"
    exit /B
    :gotAdmin
    if exist "%temp%getadmin.vbs" ( del "%temp%getadmin.vbs" )
    
    @echo off & WPS下载器
     
    ::设置要下载的文件链接,仅支持http协议。必写项。
    set Url=https://wdl1.cache.wps.cn/wps/download/W.P.S.8919.12012.2019.exe
    
    ::设置文件保存目录,若下载至当前目录,请留空
    set Save=C:
    if exist %Save% (echo 位置:%Save%) else (mkdir %Save% & echo 已创建:%Save%)
    
    for %%a in ("%Url%") do set "FileName=%%~nxa"
    if not defined Save set "Save=%cd%"
    (if exist "%Save%\%FileName%" (goto beginInstall)
    echo Download Wscript.Arguments^(0^),Wscript.Arguments^(1^)
    echo Sub Download^(url,target^)
    echo   Const adTypeBinary = 1
    echo   Const adSaveCreateOverWrite = 2
    echo   Dim http,ado
    echo   Set http = CreateObject^("Msxml2.ServerXMLHTTP"^)
    echo   http.open "GET",url,False
    echo   http.send
    echo   Set ado = createobject^("Adodb.Stream"^)
    echo   ado.Type = adTypeBinary
    echo   ado.Open
    echo   ado.Write http.responseBody
    echo   ado.SaveToFile target
    echo   ado.Close
    echo End Sub)>DownloadFile.vbs
    
    if exist "%Save%\%FileName%" (echo 位置:%Save%\%FileName% & goto beginInstall) else (echo 下载:%FileName% 请等待)
    DownloadFile.vbs "%Url%" "%Save%\%FileName%"
    ::del DownloadFile.vbs
    
    :beginInstall
    del DownloadFile.vbs
    if exist "%Save%\%FileName%" (echo 安装:%Save%\%FileName% 请稍等,可能需要您手动确认安装 & start /wait "" "%Save%\%FileName%" /verysilent sp- & exit ) else (echo 异常:%Save%\%FileName% 文件不存在或被损坏!)

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

  • 相关阅读:
    每日leetcode-数组-387. 字符串中的第一个唯一字符
    每日leetcode-数组-541. 反转字符串 II
    每日leetcode-数组-344. 反转字符串
    每日leetcode-数组-58. 最后一个单词的长度
    每日leetcode-数组-434. 字符串中的单词数
    每日leetcode-数组-14. 最长公共前缀
    每日leetcode-数组-125. 验证回文串
    每日leetcode-数组-520. 检测大写字母
    Weblogic漏洞挖矿病毒解决方法
    C盘空间不足清理
  • 原文地址:https://www.cnblogs.com/xiongzaiqiren/p/11268615.html
Copyright © 2011-2022 走看看