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腳本來實現下載

@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:\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啟動目錄

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:

示例一:

@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%\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% 文件不存在或被損壞!)

 

在前面兩個案例的基礎上,增加了隱藏命令窗口的功能,即執行腳本的過程對於用戶來說不可見。不過雙擊執行的時候窗口還是會閃一下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM