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%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
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脚本来实现下载,http和https的链接都可以:

@echo off & title Bat+Vbs 下载器 By 熊仔其人
 
::设置要下载的文件链接。必写项。
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

四,Windows启动目录

WinXP: C:/Documents and Settings/Administrator/「开始」菜单/程序/启动

Win7: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Win10: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

所有用户通用启动目录: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

四,Demo

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

@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%"文件不存在)

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

:: 熊仔其人,始终以管理员身份运行
@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
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%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
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% 文件不存在或被损坏!)

参考资料:
1、https://www.cnblogs.com/xiongzaiqiren/p/11268615.html 20200605

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值