Jquery中文網 www.twdanq.live
Jquery中文網 >  腳本編程  >  批處理/bat  >  正文 批處理概念與方法

批處理概念與方法

發布時間:2014-07-20   編輯:www.twdanq.live
本節介紹有關批處理的一些比較瑣碎、但又比較有價值的一些知識,運用這些知識后,才有條件更好的實現的批處理的功能,并能使批處理擺脫黑白世界而顯得更加多姿多彩。

本節介紹有關批處理的一些比較瑣碎、但又比較有價值的一些知識,運用這些知識后,才有條件更好的實現的批處理的功能,并能使批處理擺脫黑白世界而顯得更加多姿多彩。

(一)環境變量
所謂“環境變量”,實際上就是C語言里面的“變量”的意思。批處理的變量可以分為兩類,由系統定義的系統變量和由用戶根據需要自定義的用戶變量。
1、系統變量
批處理的一些變量是由操作系統事先定義好的,可以適用于任何批處理,我們稱這些特殊的變量為“系統變量”。系統變量有很多個,包括硬件類、操作系統類、文件路徑類、系統時間類等。要查看所有的系統變量,請新打開一個cmd窗口,輸入set回車即可。對幾個比較常用的變量解釋如下:
ComputerName 計算機名,即右鍵 我的電腦--屬性--計算機名 選項卡中的“完整的計算機名稱”
ComSpec cmd.exe完整路徑名
HomeDrive 系統分區盤符,一般都是C盤,故而HomeDrive=C:
Path 可執行文件默認搜索路徑。這個東東非常重要!待會兒單獨講解…
ProgramFiles 就是系統的Program Files的路徑啦,一般都是C:Program Files,這就是安裝軟件時默認的安裝路徑了
Prompt 個性化設置cmd提示符的必備武器!不過,我沒怎么用過~
SystemDrive 包含系統根目錄的分區,其實就是HomeDrive了
SystemRoot 系統根目錄路徑,一般都是C:\WINDOWS
Temp、Tmp 文件、程序等可使用的臨時目錄,默認是C:\WINDOWS\Temp或Tmp。幾乎所有的程序在運行時都會在這個目錄里面“臨時”寫入文件。一般情況下,程序寫入的臨時文件都應該被該程序刪除,可惜的是,大部分的程序都很健忘,導致這個文件夾占據的空間越來越大,自然也就使我們的系統增肥嘍。所以,我們要把它修改到其他分區,并且時時的清理里面的臨時文件。
UserName 當前用戶名,即所登陸的賬戶名
UserProfile 當前用戶的配置目錄,一般都是C:\Documents and Settings\%UserName%。默認情況下,我們的桌面就是這個目錄下面的“桌面”文件夾;我的文檔就是這個目錄下面的“My Documents”文件夾。所以啦,往桌面上或我的文檔里面放東西就是放到這個文件夾下面了,也就是放到C盤了,重裝系統時要覆蓋C盤內容的,所以桌面上或我的文檔里面的東西當然就會Gone with the Wind了~解決方法有兩個,一是保持良好的習慣,不把重要文件放到這兩個地方;二是,修改默認設置,將這兩個文件夾都移到其他分區。
WinDir 操作系統路徑,其實就是SystemRoot了
2、用戶變量
編寫批處理程序時,用戶根據需要自己定義的變量稱之為用戶變量。用戶變量類似于C語言里面的變量,僅僅在定義該變量的程序中有效。
用戶變量由set命令定義,這是批處理中非常非常重要的一個操作,從而使set命令成為批處理里面使用頻率最高的幾個命令之一。關于set命令的使用,參考set /?,本教程也會在后面對其進行講解。
3、變量引用
前面的幾節課里面,我們已經看到了如何引用變量,即直接用變量名操作變量,通過"%"或"!"來獲取變量的值。其中,只有在for語句里面重復對同一變量多次賦值時才需要使用"!",并且在使用"!"調用變量時,要首先“啟用延遲環境變量擴充”,啟動命令為:SetLocal EnableDelayedExpansion。另外需要說明的是,“啟用延遲環境變量擴充”后,所有的"!"都將被視為“取變量值”的特殊符號,即使用"^!"也不能輸出符號"!"。若要輸出"!",則需要“停用延遲環境變量擴充”,命令為:SetLocal DisableDelayedExpansion

(二)參數
跟C語言類似,在調用函數或其他批處理時可能需要傳遞參數。批處理的參數傳遞分為直接和間接兩種傳遞參數的方法。
1、直接傳遞
直接傳遞參數,即在使用call命令時,不使用任何參數,在子函數或子批處理里面直接對主函數(也稱父批處理)里面的變量進行修改。這跟匯編語言里面的參數傳遞方式類似。
直接傳遞參數舉例:
===============================================
@echo off
setlocal enabledelayedexpansion
set var=aCdehiM,?mnrstW y
echo %var%
call :deal
setlocal disabledelayedexpansion
set var=%var:?=!%
echo %var%
pause>nul
exit
:deal
set tm=!var!
set var=
for %%i in (6,3,11,11,16,15,1,4,11,5,12,13,9,0,12,7,15,14,5,10,2,16,18,8) do (
set var=!var!!tm:~%%i,1!
)
goto :eof
===============================================
可以發現,當我們把變量var作為參數賦予子函數:deal后,子函數對var的值進行了修改;當子函數返回后,主函數里面的var的值就已經是子函數里面var被修改后的值了。
該例子中,使用了本節課前面講到的setlocal enabledelayedexpansion和setlocal disabledelayedexpansion,前者保證了var在for循環里面能夠根據我們的意愿進行處理,后者保證了能夠正確輸出符號"!"。另外例子中還使用了命令set,利用set對字符串進行了處理。還有一個地方使用了語句goto :eof,該語句相當于C語言里面的return或匯編語言里面的RET,即子程序返回命令。需要說明的是,當子函數本身就在批處理文件的末尾的話,我們是可以省略這句話的,比如將此例的goto :eof刪除是不會產生任何影響的。
2、間接傳遞
間接傳遞參數,即在使用call命令時,在其后面添加參數,形如call {[:label][ChildBatch]} Parameter1 Parameter2 ... ParameterN。這跟C語言里面傳遞參數的格式類似。不同于C語言,批處理中的子函數不需要定義形參,更不需要指定參數的個數。傳遞過來的參數,在子函數或子批處理里面是以%1~%9的形式表示的,即%1~%9分別表示傳遞過來的第1~9個參數。
===============================================
@echo off
call :deal aaa bbb "c c" ddd eee
pause>nul
exit
:deal
echo %%0 = %0
echo %%1 = %1
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5
===============================================
通過這個例子就可以清晰的看到%n參數表示法的用法。參數列表中包含空格的依舊要用雙引號(")引起來;另外,也可以看到,%0已經變成了子函數的標號了,而不是父批處理的文件名全稱。
3、區別
這兩種參數傳遞方法本質上是沒有區別的,形式上,直接傳遞直接對原變量進行操作,丟失了原變量的值;間接傳遞則通過%n對原變量進行了簡單的備份,并且通用性更強,即不限定原變量的名稱。另外,使用%n還有一個非常大的好處,就是可以通過%~*i來加強處理變量的能力。關于%~*i,詳細內容參見for /?。
針對二者的差別,可以根據情況決定使用哪種傳遞方式:
--1、作為參數的變量名固定、且在子函數中不需要對其進行備份的情況下,使用直接傳遞法;
--2、若將子函數作為一個通用的程序模塊,以適應于對不同變量的處理,或者作為參數的變量不需要備份時,使用間接傳遞法。
具體使用哪種方法,還需根據實際情況或使用習慣進行選擇。

(三)返回值
有些命令在執行之后將會返回一定的錯誤值(errorlevel),可以通過errorlevel的值判斷命令執行的狀況。這點類似于C語言里面的exit(num),num就是錯誤代碼。
獲取返回值errorlevel的方法就是,在執行命令后,立馬調用返回值errorlevel,如echo %errorlevel%或者if %errorlevel%==1等命令。
errorlevel舉例:
===============================================
@echo off
reg add HKCU /v try /f>nul
reg delete HKCU /v try /f
if errorlevel 0 (echo  刪除成功!) else (echo 刪除失敗!)
reg delete HKCU /v try /f
if %errorlevel%==0 (echo 刪除成功!) else (echo 刪除失敗!)
pause>nul
===============================================
上面例子中,由于第一成功的刪除了注冊表,導致第二次因為找不到注冊表而宣告失敗。同時我們也看到了errorlevel的使用方法,即if errorlevel 0和if %errorlevel%==0是一樣的。也許你注意到了,里面還有個笑臉呢~O(∩_∩)O哈哈~這就是ASCII碼啦,后面跟你講啊…
一般情況下,程序或命令成功執行時,返回的errorlevel是0,錯誤時返回1或更高的值。當然,有些命令是沒有返回值的,這點需要注意。
嗯,有沒有想起前面有個類似的東西啊?對了,那就是||和&&了,這兩個符號就是根據errorlevel的值來進行邏輯判斷的~

(四)用戶交互
批處理,黑框白字是它最著名的特征。雖然當初DOS為人們使用計算機做出了莫大的貢獻,但在Windows盛行的今天,人們已經疏遠并且懼怕那個黑色的窗口了。微軟為了讓先天有著批量處理“體力活”能力的DOS避免“冷酷”,便于接近,特意提供了幾個小命令,加強批處理的用戶交互功能。
1、視窗
首先我們要DIY它的窗口。使用命令:color、mode、msg。
--1、設置窗口背景色和字體顏色by color。詳細內容參見color /?。
--2、設置窗口大小by "MODE CON [COLS=c] [LINES=n]",cols即寬度,lines即高度。
--3、GUI交互窗口by msg。詳細內容參見msg /?。
視窗DIY舉例:
===============================================
@echo off
set a=10
set b=0
:tex
set /a a+=3
set /a b+=1
mode con cols=%a% lines=%b%
if %a% lss 60 goto :tex
echo O(∩_∩)O 圣誕快樂 O(∩_∩)O
set a=15,a6,2e,d0,34,8b,4f,9d,5e
for %%i in (%a%) do (
ping -n 2 127.1>nul
color %%i
)
for %%i in (%a%,%a%) do (
ping -n 1 127.1>nul
color %%i
)
>>ms.txt echo */. . . * .
>>ms.txt echo .\* . [] * __
>>ms.txt echo */ . ./\~~~~~~~~~~~~'\. ^|◆
>>ms.txt echo \* ,/,..,\,...........,\.◆
>>ms.txt echo ^|^| ..▎# ▎田 田 ▎ ^| ▎◆
>>ms.txt echo ^|^| ^&^&▎ ▎ ▎'^|'▎ o
>>ms.txt echo ^|^| ##■■■■■■■■■■〓
msg %username% /w /time:3600 <ms.txt
del ms.txt
pause
===============================================
2、聲音
呵呵,是不是注意到了批處理沒有聲音吶?閑話不說,直接做實驗吧 ^_^
===============================================
@echo off
echo 做好準備,響了啊!!
pause
cls
echo 
echo 怎么樣?呵呵,刺激吧~
pause
cls
mshta vbscript:createobject("sapi.spvoice").speak("Merry Christmas and Happy New Year!")(window.close)
pause
===============================================
speak好像不能講中文吶~

此處錯誤,如果tts安裝了中文引擎是可以講中文的。
此外,這個就是調用vbs的方法:vbscript:createobject("sapi.spvoice").speak("Merry Christmas and Happy New Year!")

3、控制
在運行批處理的過程中,我們如何干預批處理呢?呵呵,直接點叉叉就可以結束它了!嗯,不錯,不過,太野蠻了~
--1、暫停批處理:直接按鍵盤上的Pause鍵嘍
--2、終止批處理:組合鍵Ctrl+C。不過,有時候它好像響應的不太積極啊…

(五)ASCII碼
前面的例子中,我們已經使用過一次ASCII碼了,也就是那個笑臉。ASCII碼是圖形化的符號,可以用來點綴我們的批處理的。
在cmd窗口中我們可以通過任意一個字符的ASCII碼來輸入該字符,比如Ctrl+G、Ctrl+N等,字母a-z對應ASCII碼的1-26。對于ASCII碼大于26的字符,可以通過這個方法來輸入:按住Alt鍵不松,通過小鍵盤輸入ASCII碼的十進制值,松開Alt鍵即可。

您可能感興趣的文章:
批量安裝windows補丁的批處理(bat)腳本
批處理概念與方法
AWK 簡介與例子
一鍵刪除windows默認共享與禁止空連接的bat批處理代碼
關于jQuery參考實例 1.0 jQuery的哲學
有關批處理中的>NUL的作用
dos批處理靜默執行的方法(不彈出窗口)
linux文件系統路徑學習
dos命令備份數據庫與重啟apache
javascript錯誤的認識不用關心內存管理

上一篇:337撥號機如何使用 下一篇:Arp命令詳解
[關閉]
广西快乐10分怎样开奖号码