DOS批處理高級教程精選(六)

第五章 set命令詳解函數

好久沒發貼了,今天來寫點講BAT的新手教學貼!命令行

在上一貼中我簡單的介紹了一下SET設置自定義變量的做用,如今我來具體講一下set的其餘功能.設計

1、用set命令設置自定義變量字符串

顯示、設置或刪除 cmd.exe 環境變量。
SET [variable=[string]]
variable 指定環境變量名。
string    指定要指派給變量的一系列字符串。
要顯示當前環境變量,鍵入不帶參數的 SET。
SET 命令不容許變量名含有等號。input

注意:如下用法將清除變量variable的值,使其變成未定義狀態。
SET variable=
上面等號後面無任何符號,若是寫成SET variable="",此時變量值並不爲空,而是等於兩個引號,即""cmd


例子:
@echo off
set var=我是值
echo %var%
pause字符串處理

請看 set var=我是值 ,這就是BAT直接在批處理中設置變量的方法!
set 是命令   var是變量名 =號右邊的"我是值"是變量的值
在批處理中咱們要引用這個變就把var變量名用兩個%(百分號)擴起來,如%var%數學


SET還能夠提供一個交互界面,讓用戶本身輸入變量的值,而後咱們在來根據這個值來作相應操做,如今我就來講說SET的這種語法,只須要加一個"/P"參數就能夠了!
SET /P variable=[promptString]string


例子:
@echo off
set /p var=請輸入變量的值:
echo 您輸入了 %var% ~_~
pauseit

set /p 是命令語法 var是變量名    =號右邊的"請輸入變量的值: ",這個是提示語,不是變量的值了!
運行後,咱們在提示語後面直接輸入1,就會顯示一行您輸入了 1 ~_~

好了,先回顧到這,如今講SET其餘功能

使用set /?查看SET的幫助咱們發現SET除了我上面講的
SET [variable=[string]]
SET /P variable=[promptString]
這兩種語法外,還有以下幾種語法:
SET /A expression
環境變量替換已以下加強:
%PATH:str1=str2%
%PATH:~10,5%
%PATH:~-10%
%PATH:~0,-2%

這機種語法有什麼用處呢?下面咱們來一個個講解他們!

2、用set命令進行簡單計算

語法:SET /A expression
/A 命令行開關指定等號右邊的字符串爲被評估的數字表達式。該表達式
評估器很簡單並以遞減的優先權順序支持下列操做:
    ()                  -分組
    ! ~ -               -一元運算符
    * / %               -算數運算符
    + -                 -算數運算符
    << >>               -二進制邏輯移位
    &                   -二進制按位「與」
    ^                   -二進制按位「異」
    |                   -二進制按位「或」
    = *= /= %= += -=    -算數賦值
    &= ^= |= <<= >>=    -二進制運算賦值
    ,                   -表達式分隔符

若是 SET /A 在命令腳本外的命令行執行的,那麼它顯示該表達式的最後值。
除十六進制有 0x 前綴, 八進制有 0 前綴的,數字值爲十進位數字。
所以, 0x12 與 18 和 022相同。請注意八進制公式可能很容易搞混:
08 和 09 是無效的數字,由於 8 和 9 不是有效的八進制位數。

上面這些是系統幫助裏的內容,看着是否是有點暈,不要緊我來簡單解釋一下:
set的/A參數就是讓SET能夠支持數學符號進行加減等一些數學運算!

注意:通常的運算常爲十進制運算,若是數字字符串最左邊爲0,將被認爲是八進制,從而出錯。好比,0812之類的數字不能參與十進制運算,轉換方法爲:10812-10000

例:
set aa=0812
set /a aa=1%aa%-10000
echo %aa%
結果爲:812


例:
@echo off
set /p input=請輸入計算表達式:
set /a var=%input%
echo 計算結果:%input%=%var%
pause

上面的例子是龍捲風設計的,很好用喲,請看下面幾個運算過程:
注意:DOS計算只能進行整數運算,精確到整數

請輸入計算表達式:1+9+20+30-10
計算結果:1+9+20+30-10=50
請按任意鍵繼續. . .

請輸入計算表達式:10/3    #除法只能精確到整數
計算結果:10/3=3
請按任意鍵繼續. . .

請輸入計算表達式:-100+62 #負數
計算結果:-100+62=-38
請按任意鍵繼續. . .

請輸入計算表達式:100%3    #求餘數
計算結果:100%3=1
請按任意鍵繼續. . .
注意:以上的求餘數運算符%在批處理程序中必須寫成%%


請輸入計算表達式:(25+75)*2/(15+5)   #括號
計算結果:(25+75)*2/(15+5)=10
請按任意鍵繼續. . .


請輸入計算表達式:1234567890*9876543210   #範圍
無效數字。數字精確度限爲 32 位。
計算結果:1234567890*9876543210=
請按任意鍵繼續. . .

注意:上面的計算過程顯示,DOS計算只能精確到32位,這個32位是指二進制32位,其中最高位爲符號位(0爲正,1爲負),低位31位爲數值。31個1換成十進制爲2147483647,因此DOS計算的有效值範圍是-2147483648至2147483647,超出該數值範圍時計算出錯,請看下面的計算過程:

請輸入計算表達式:2147483647-1    #最大值減1,值有效
計算結果:2147483647-1=2147483646
請按任意鍵繼續. . .

請輸入計算表達式:2147483647+1    #最大值加1,出錯,結果爲最小值
計算結果:2147483647+1=-2147483648
請按任意鍵繼續. . .

請輸入計算表達式:-2147483648-1   #最小值減1,出錯,結果爲最大值
計算結果:-2147483648-1=2147483647
請按任意鍵繼續. . .

運行set /a a=1+1,b=2+1,c=3+1後會顯示一個4,但咱們用
echo %a% %b% %c%後看結果,會發現其餘數學運算也有效果!,這就是表達式分隔符"逗"號的
做用!

有時候咱們須要直接在原變量進行加減操做就能夠用這種語法
set /a var+=1 這樣的語法對應原始語法就是set /a var = %var% + 1
都是同樣的結果,在原變量的值上在進行數學運算,不過這樣寫簡單一點
再來一個:
set /a var*=2
其餘都這麼用,只要幫助裏有這個語法!

另外還有一些用邏輯或取餘操做符,這些符號,按照上面的使用方法會報錯的

好比咱們在CMD裏輸入set /a var=1 & 1 "與運算",他並不會顯示爲1,而是報錯,
爲何?對於這樣的"邏輯或取餘操做符",咱們須要把他們用雙引號引發來,也能夠用轉義字符^,看例子

set /a var= 1 "&" 1 這樣結果就顯示出來了,其餘邏輯或取餘操做符用法
set /a var= 1 "+" 1 異運算
set /a var= 1 "%" 1 取模運算
set /a var= 3 "<<" 2 左移位運算, 3的二進制爲11,左移2位爲1100,換成十進制就是12,自行驗證
set /a var= 4 ">>" 2右移位運算,4的二進制爲100,右移動2位爲1,結果爲1

龍捲風補充:凡是按位計算均需換算成二進制。

思考題:求2的n次方
參考答案:
@echo off
set /p n=請輸入2的幾回方:
set /a num=1^<^
echo %num%
pause

運行結果:
請輸入2的幾回方: 3
8
請按任意鍵繼續. . .

請輸入2的幾回方: 10
1024
請按任意鍵繼續. . .

請輸入2的幾回方: 15
32768
請按任意鍵繼續. . .


休息一下!

----------------------------
史前超文明謎團
----------------------------
    奧克洛(Oklo)是非洲加蓬共和國一個鈾礦的名字,法國有一些工廠使用從加蓬進口的鈾礦石。1972年6月7日,法國科學家皮爾裏特在用質譜計分析自然丰度的六氟化鈾時,驚訝地發現,這批進口鈾礦石已被人利用過了。由於這批鈾礦石的含鈾量至關低,鈾礦石的通常含鈾量爲0.72%,而奧克洛鈾礦石的含鈾量卻不足0.3%,和咱們現有的核反應堆的廢料幾乎相同。
    這件事引發了法國原子能委員會的高度重視。爲此,許多科學家趕赴礦區進行考察研究。不久,奧克洛爆出了一條震驚世界的新聞:這裏有一個古老的核反應堆,並且核反應堆的構成很是合理。法國政府宣佈的這一發現,震驚了全世界。
    這個核反應堆是由6個區域的大約500噸鈾礦石組成,它的輸出功率很低,只有10到100千瓦。據考證,該礦成礦年代大約在20億年前,核反應堆在成礦後不久就開始運轉,運轉時間長達50萬年之久,核反應所產生的廢物,並無擴散,而是侷限在礦區周圍。面對這個保存完整、結構合理的核反應堆,科學家們膛目結舌。
--------------
回味無窮的疑問
--------------
    是誰在20億年前留下了這個古老的核反應堆?是外星人的做品,仍是前一代地球文明的遺蹟?20億年前的反應堆又怎麼來解釋呢?這個鈾礦究竟是怎麼回事呢?有人認爲這是20億年前的天外來客的傑做。他們乘坐宇宙飛船來到地球上,選擇了奧克洛這個地方建造了原子反應堆,以原子裂變或聚變所釋放的能量爲能源動力,爲他們在地球上的活動提供能量。後來,他們離開了地球,返回了他們的「故里」,就在地球上留下了這座極古老而又神祕的原子反應堆。還有一種推斷認爲這是史前文明所留下的遺蹟。也就是說,20億年前,在今天咱們叫作奧克洛的地方,可能存在着高度發達的文明,遠遠超過今天的人類文明。
????選自《世界未解之謎》


3、用set命令進行字符串處理


一、字符串替換

好了,符號說到這,如今說%PATH:str1=str2%
上面語法的意思就是:將字符串變量%PATH%中的str1替換爲str2
這個是替換變量值的內容,看例子
@echo off
set a= bbs. verybat. cn
echo 替換前的值: "%a%"
set var=%a: =%
echo 替換後的值: "%var%"
pause

運行顯示:(龍捲風添加)
替換前的值: " bbs. verybat. cn"
替換後的值: "bbs.verybat.cn"

對比一下,咱們發現他把變量%a%的空格給替換掉了,從這個例子,咱們就能夠發現
%PATH:str1=str2%這個操做就是把變量%PATH%的裏的str1所有用str2替換

好比咱們把上面的例子改爲這樣
@echo off
set a=bbs.verybat.cn
echo 替換前的值: "%a%"
set var=%a:.=傷腦筋%
echo 替換後的值: "%var%"
pause

運行顯示:
替換前的值: "bbs.verybat.cn"
替換後的值: "bbs傷腦筋verybat傷腦筋cn"

解釋set var=%a:.=傷腦筋%
    set是命令 var是變量名 字a是要進行字符替換的變量的值,"."爲要替換的值,
"傷腦筋"爲替換後的值!
執行後就會把變量%a%裏面的"."所有替換爲"傷腦筋"
這就是set的替換字符的很好的功能! 替換功能先講到這,下面將字符串截取功能

請注意:字符串的替換和截取功能在引用變量的地方都可以,並不必定必需要有set命令
例:
@echo off
set a=bbs.verybat.cn
echo 替換前的值: "%a%"
echo 替換後的值: "%a:.=傷腦筋%"
pause
此例在echo語句中就替換了字符串,效果同樣。


二、字符串截取

**********************************************
截取功能統一語法格式爲:%a:~[m[,n]]%
**********************************************
方括號表示可選,%爲變量標識符,a爲變量名,不可少,冒號用於分隔變量名和說明部分,符號~能夠簡單理解爲「偏移」便可,m爲偏移量(缺省爲0),n爲截取長度(缺省爲所有)


%PATH:~10,5% 這個什麼意思,看例子:

截取功能例子1:
@echo off
set a=bbs.verybat.cn
set var=%a:~1,2%
echo %var%
pause

執行後,咱們會發現只顯示了"bs"兩個字母,咱們的變量%a%的值不是爲bbs.verybat.cn嗎?
怎麼只顯示了第2個字母和第3個字母"bs",分析一結果咱們就能夠很容易看出
%PATH:~10,5%就是顯示變量PATH裏從11位(偏移量10)開始的5個字符!
分析set var=%a:~1,2%
set是命令,var是變量值,a要進行字符操做的變量,"1"從變量"a"第幾位開始顯示,"2"表示顯示幾位。
合起來就是把變量a的值從第2位(偏移量1)開始,把2個字符賦予給變量var
這樣應該明白了吧~

其餘兩種語法
%PATH:~-10%
%PATH:~0,-2%
他們也是顯示指定變量指定幾位的值的意思

%PATH:~-10% 看例子

截取功能例子2:
@echo off
set a=bbs.verybat.cn
set var=%a:~-3%
echo %var%
pause
運行結果:.cn
這個就是把變量a倒數3位的值給變量VAR

固然咱們也能夠改爲這樣
截取功能例子3:
@echo off
set a=bbs.verybat.cn
set var=%a:~3%
echo %var%
pause
運行顯示:.verybat.cn
這個就是把變量a的從第3位開始後面所有的值給變量VAR

%PATH:~0,-2% 例子

截取功能例子4:
@echo off
set a=bbs.verybat.cn
set var=%a:~0,-3%
echo %var%
pause
執行後,咱們發現顯示的是"bbs.verybat",少了".cn"
從結果分析,很容易分析出,這是把變量a的值從0位開始,
到倒數第三位之間的值所有賦予給var

若是改爲這樣

截取功能例子5:
@echo off
set a=bbs.verybat.cn
set var=%a:~2,-3%
echo %var%
pause
運行顯示:s.verybat
那麼他就是顯示從第3位(偏移量2)開始減去倒數三位字符的值,並賦予給變量var

講得好,例子就是說明問題,爲便於記憶,龍捲風小節以下:
a=bbs.verybat.cn
%a:~1,2%   =「bs」   偏移量1,從第二位開始向右取2位
%a:~-3%    =「.cn」 偏移量負3,即倒數3位(也可理解爲留下右邊3位),右取所有
%a:~3%     =「.verybat.cn」 偏移量3(也可理解爲去掉左邊3位),右取所有
%a:~0,-3%   =「bbs.verybat」 偏移量0,右取長度至負3,即倒數3位
%a:~2,-3%   =「s.verybat」 偏移量2,右取長度至負3,即倒數3位

**********************************************
因此,截取功能統一語法格式爲:%a:~[m[,n]]%
**********************************************
方括號表示可選,%a%爲變量名,不可少,冒號用於分隔變量名和說明部分,符號~能夠簡單理解爲「偏移」便可,m爲偏移量(缺省爲0),n爲截取長度(缺省爲所有)
上面所述用法其實至關於vbs函數mid、left、right
%a:~0,n% 至關於函數left(a,n) 取左邊n位
%a:~-m% 至關於函數right(a,m) 取右邊m位
%a:~m,n% 至關於函數mid(a,m+1,n) 從m+1位開始取n位
%a:~m,-n% 至關於函數mid(a,m+1,len(a)-m-n),從m+1位開始,至倒數n+1位
%a:~m % 至關於函數mid(a,m+1,len(a)-m) 或者right(a,len(a)-m),從m+1位開始取右邊所有。

思考題目:輸入任意字符串,求字符串的長度
參考答案:

@echo off
set /p str=請輸入任意長度的字符串:
echo 你輸入了字符串:"%str%"
call :stringlenth "%str%" num
echo 字符串長度爲:%num%
pause
exit

:StringLenth
::---------字符串長度計算子程序
::---------參數%1爲字符串(若有空格,請用引號括起來)
::---------參數%2爲返回變量名稱,不能含空格或特殊字符
::@echo off
set theString=%~1
if not defined theString goto :eof
set Return=0
:StringLenth_continue
set /a Return+=1
set thestring=%thestring:~0,-1%
if defined thestring goto StringLenth_continue
if not "%2"=="" set %2=%Return%
goto :eof


好了set的一些用法,就介紹到這了,但願對各位有所幫助,時間不早睡覺Zz....

                                              by 傷腦筋

休息休息!

詩曰:  

  混沌未分天地亂,茫茫渺渺無人見。  
  自從盤古破鴻蒙,開闢從茲清濁辨。  
  覆載羣生仰至仁,發明萬物皆成善。  
  欲知造化會元功,須看西遊釋厄傳。  

    《西遊記》是我國著名神話小說,是中華五千年文化的見證之一。唐僧乃大唐高僧玄奘法師,往印度求取佛經,導致中華佛家文化大放異彩。    唐僧:表明古代修行人對佛法的堅決執着之心。雖然唐僧手無縛雞之力,但他不受金錢、美女、權利的誘惑,面對生死也不改變志向。這些都是古人所推崇的,因此唐僧是師父,其餘人再有本事也只能當徒弟了。    悟空:「空」、「無」都是高層次的體現,故悟空本事最大。悟空的兵器爲「定海神針」,寓意佛家的「定」。    悟能:層次不高,缺點也多,但有點本事。因其缺點多,故又名「八戒」。    悟淨:層次不高,本事不大,僅僅有一個清淨之心,故名「悟淨」。但清淨心也很重要,因此有幾回悟空遇難時,乃悟淨所救。

相關文章
相關標籤/搜索