以下應(yīng)一網(wǎng)友要求寫(xiě)的進(jìn)度條配合BAT腳本批量執(zhí)行程序時(shí)給出程序的執(zhí)行進(jìn)度。
同時(shí)變相的處理在腳本中遇到的小數(shù)問(wèn)題,我在腳本中做的不夠精確,如果需要更高的精確度,可以多添加幾次循環(huán)?;貜?fù)該貼中提出的小數(shù)問(wèn)題 http://bbs.bitscn.com/85384
腳本內(nèi)容:
@echo off
title 程序制作"怕瓦落地".歡迎關(guān)注www.BitsCN.com
rem 說(shuō)明:
rem 變量b為平均值的整數(shù)部分,變量c為平均值的小數(shù)部分,變量hs表示需要執(zhí)行的命令總數(shù)并加1,防止程序進(jìn)入死鎖.
rem 如果沒(méi)有小數(shù)部分,請(qǐng)把變量c賦零值
rem 變量pjump默認(rèn)為1表示在編輯note.txt文件時(shí)第一行必須為空.
color 0a
set b=1
set c=0
set /a hs=81
set pjump=1
set a=■
set /a zs=%b%
set /a g=%c%
rem 上面這部分沒(méi)什么解釋的,是主要變量的相關(guān)說(shuō)明,及賦值。
:pstart
rem 進(jìn)度條代碼開(kāi)始
cls
set a=%a%■
echo.
echo 程序正在安裝中,請(qǐng)等待
echo ┌─────────────────────────────────────┐
echo %a% %zs%.%g%%%
echo └─────────────────────────────────────┘
rem 進(jìn)度條代碼結(jié)束
rem 上面這部分是在該腳本執(zhí)行中所看到的進(jìn)度條是如何前進(jìn)的。
rem 下面這行是從文件note.txt中讀取預(yù)先編輯好的執(zhí)行命令和參數(shù),關(guān)于for命令的解釋請(qǐng)參考命令本身幫助系統(tǒng).
for /f "delims=, skip=%pjump% tokens=2" %%m in (note.txt) do set pcmd=%%m & goto jisuo
:jisuo
echo "正在執(zhí)行%pcmd%程序"
%pcmd%
set /a pjump=%pjump%+1
if %pjump%==%hs% goto pexit ::該句是判斷文件note.txt中有多少條需要執(zhí)行的命令,在腳本的開(kāi)始部分有說(shuō)明,需要人為的指出,主要的作用是防止腳本在運(yùn)行中出現(xiàn)意外,或者進(jìn)入死鎖.可有可無(wú).
set /a zs=%zs%+%b%
set /a d=%d%+c
set e=%d%
set g=%d%
if %d% geq 10 goto xiaoshu
goto pstart
rem 上面這段是是處理百分比中如果出現(xiàn)小數(shù),也進(jìn)行粗略的計(jì)算,如果想獲得更高的精確度可以按照下面這段代碼去擴(kuò)展程序.
:xiaoshu
set g=%e:~-1% ::擴(kuò)展變量e 并取變量值的最后一個(gè)字符并賦值給變量g,如果變量e此時(shí)的值為15,那么此時(shí)g得到的值是5
set /a zs=%zs%+1
set /a d=%g%
goto pstart
rem 上面這段是計(jì)算小數(shù)部分當(dāng)小數(shù)部分壘加和大于等于10時(shí)才會(huì)執(zhí)行,
:pexit
exit
總的來(lái)說(shuō)該腳本的運(yùn)行思路是讀取note.txt中預(yù)先編輯的命令和參數(shù)并給予執(zhí)行,每執(zhí)行完一條命令都會(huì)在進(jìn)度條上反映出執(zhí)行進(jìn)度(該腳本只能處理已知的進(jìn)度并加已表現(xiàn)).
關(guān)于在進(jìn)度條中出現(xiàn)的小數(shù).例如 15.3%. bat腳本中,偶還沒(méi)有找到能處理小數(shù)的命令,所以只能變相的處理了
處理方法是,把一個(gè)小數(shù)拆分成整數(shù)部分和小數(shù)部分并分別加以計(jì)算
在該腳本中但小數(shù)部分壘加和大于等于10時(shí)就會(huì)向整數(shù)部分進(jìn)1 并做相關(guān)處理步驟.腳本中用朱砂紅標(biāo)記出來(lái)的就是.
然后把兩個(gè)部分的計(jì)算結(jié)果在組合到一起.其實(shí)是通過(guò)輸出命令來(lái)做的用深綠色標(biāo)記出來(lái)的就是.并沒(méi)有相關(guān)的組合表達(dá)式來(lái)做這個(gè)步驟,因?yàn)椴恍枰胗?jì)算.只是用于顯示,足已.
該腳本代碼不長(zhǎng)但用到的變量較多,應(yīng)該優(yōu)化的可能以減少多的變量.請(qǐng)仔細(xì)閱讀應(yīng)該不難理解.歡迎交流.
待執(zhí)行命令文件(以下文件內(nèi)容為事例文件),注意:在測(cè)試環(huán)境中,復(fù)制下面的內(nèi)容保存為note.txt文件并放在腳本同一目錄即可。
【轉(zhuǎn)自bbs.bitsCN.com】
聯(lián)系客服