一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

DOS批處理高級教程精選(六) - 第二天堂

 -飛龍在天- 2010-12-09

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

發(fā)表于 2010年06月09日 10:49 分類: 工作日志 統(tǒng)計: 0評/86閱 1人收藏此文章, 收藏此文章()

第五章 set命令詳解

很久沒發(fā)貼了,今天來寫點講BAT的新手教學(xué)貼!

在上一貼中我簡單的介紹了一下SET設(shè)置自定義變量的作用,現(xiàn)在我來具體講一下set的其他功能.

 

一、用set命令設(shè)置自定義變量

顯示、設(shè)置或刪除 cmd.exe 環(huán)境變量。
SET [variable=[string]]
variable 指定環(huán)境變量名。
string    指定要指派給變量的一系列字符串。
要顯示當(dāng)前環(huán)境變量,鍵入不帶參數(shù)的 SET。
SET 命令不允許變量名含有等號。

注意:以下用法將清除變量variable的值,使其變成未定義狀態(tài)。
SET variable=
上面等號后面無任何符號,如果寫成SET variable="",此時變量值并不為空,而是等于兩個引號,即""


例子:
@echo off
set var=我是值
echo %var%
pause

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


SET還可以提供一個交互界面,讓用戶自己輸入變量的值,然后我們在來根據(jù)這個值來做相應(yīng)操作,現(xiàn)在我就來說說SET的這種語法,只需要加一個"/P"參數(shù)就可以了!
SET /P variable=[promptString]


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

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

好了,先回顧到這,現(xiàn)在講SET其他功能

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

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

 

 

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

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

如果 SET /A 在命令腳本外的命令行執(zhí)行的,那么它顯示該表達式的最后值。
除十六進制有 0x 前綴, 八進制有 0 前綴的,數(shù)字值為十進位數(shù)字。
因此, 0x12 與 18 和 022相同。請注意八進制公式可能很容易搞混:
08 和 09 是無效的數(shù)字,因為 8 和 9 不是有效的八進制位數(shù)。

上面這些是系統(tǒng)幫助里的內(nèi)容,看著是不是有點暈,沒關(guān)系我來簡單解釋一下:
set的/A參數(shù)就是讓SET可以支持?jǐn)?shù)學(xué)符號進行加減等一些數(shù)學(xué)運算!

注意:一般的運算常為十進制運算,如果數(shù)字字符串最左邊為0,將被認(rèn)為是八進制,從而出錯。比如,0812之類的數(shù)字不能參與十進制運算,轉(zhuǎn)換方法為:10812-10000

例:
set aa=0812
set /a aa=1%aa%-10000
echo %aa%
結(jié)果為:812


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

上面的例子是龍卷風(fēng)設(shè)計的,很好用喲,請看下面幾個運算過程:
注意:DOS計算只能進行整數(shù)運算,精確到整數(shù)

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

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

請輸入計算表達式:-100+62 #負(fù)數(shù)
計算結(jié)果:-100+62=-38
請按任意鍵繼續(xù). . .

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


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


請輸入計算表達式:1234567890*9876543210   #范圍
無效數(shù)字。數(shù)字精確度限為 32 位。
計算結(jié)果:1234567890*9876543210=
請按任意鍵繼續(xù). . .

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

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

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

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

 

 

運行set /a a=1+1,b=2+1,c=3+1后會顯示一個4,但我們用
echo %a% %b% %c%后看結(jié)果,會發(fā)現(xiàn)其他數(shù)學(xué)運算也有效果!,這就是表達式分隔符"逗"號的
作用!

 

有時候我們需要直接在原變量進行加減操作就可以用這種語法
set /a var+=1 這樣的語法對應(yīng)原始語法就是set /a var = %var% + 1
都是一樣的結(jié)果,在原變量的值上在進行數(shù)學(xué)運算,不過這樣寫簡單一點
再來一個:
set /a var*=2
其他都這么用,只要幫助里有這個語法!

 

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

比如我們在CMD里輸入set /a var=1 & 1 "與運算",他并不會顯示為1,而是報錯,
為什么?對于這樣的"邏輯或取余操作符",我們需要把他們用雙引號引起來,也可以用轉(zhuǎn)義字符^,看例子

set /a var= 1 "&" 1 這樣結(jié)果就顯示出來了,其他邏輯或取余操作符用法
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,結(jié)果為1

龍卷風(fēng)補充:凡是按位計算均需換算成二進制。

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

運行結(jié)果:
請輸入2的幾次方: 3
8
請按任意鍵繼續(xù). . .

請輸入2的幾次方: 10
1024
請按任意鍵繼續(xù). . .

請輸入2的幾次方: 15
32768
請按任意鍵繼續(xù). . .


休息一下!

----------------------------
史前超文明謎團
----------------------------
    奧克洛(Oklo)是非洲加蓬共和國一個鈾礦的名字,法國有一些工廠使用從加蓬進口的鈾礦石。1972年6月7日,法國科學(xué)家皮爾里特在用質(zhì)譜計分析天然豐度的六氟化鈾時,驚訝地發(fā)現(xiàn),這批進口鈾礦石已被人利用過了。因為這批鈾礦石的含鈾量相當(dāng)?shù)停櫟V石的一般含鈾量為0.72%,而奧克洛鈾礦石的含鈾量卻不足0.3%,和我們現(xiàn)有的核反應(yīng)堆的廢料幾乎相同。
    這件事引起了法國原子能委員會的高度重視。為此,許多科學(xué)家趕赴礦區(qū)進行考察研究。不久,奧克洛爆出了一條震驚世界的新聞:這里有一個古老的核反應(yīng)堆,而且核反應(yīng)堆的構(gòu)成非常合理。法國政府宣布的這一發(fā)現(xiàn),震驚了全世界。
    這個核反應(yīng)堆是由6個區(qū)域的大約500噸鈾礦石組成,它的輸出功率很低,只有10到100千瓦。據(jù)考證,該礦成礦年代大約在20億年前,核反應(yīng)堆在成礦后不久就開始運轉(zhuǎn),運轉(zhuǎn)時間長達50萬年之久,核反應(yīng)所產(chǎn)生的廢物,并沒有擴散,而是局限在礦區(qū)周圍。面對這個保存完整、結(jié)構(gòu)合理的核反應(yīng)堆,科學(xué)家們膛目結(jié)舌。
--------------
耐人尋味的疑問
--------------
    是誰在20億年前留下了這個古老的核反應(yīng)堆?是外星人的作品,還是前一代地球文明的遺跡?20億年前的反應(yīng)堆又怎么來解釋呢?這個鈾礦到底是怎么回事呢?有人認(rèn)為這是20億年前的天外來客的杰作。他們乘坐宇宙飛船來到地球上,選擇了奧克洛這個地方建造了原子反應(yīng)堆,以原子裂變或聚變所釋放的能量為能源動力,為他們在地球上的活動提供能量。后來,他們離開了地球,返回了他們的“故里”,就在地球上留下了這座極古老而又神秘的原子反應(yīng)堆。還有一種推斷認(rèn)為這是史前文明所留下的遺跡。也就是說,20億年前,在今天我們叫做奧克洛的地方,可能存在著高度發(fā)達的文明,遠(yuǎn)遠(yuǎn)超過今天的人類文明。
選自《世界未解之謎》

 


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


1、字符串替換

好了,符號說到這,現(xiàn)在說%PATH:str1=str2%
上面語法的意思就是:將字符串變量%PATH%中的str1替換為str2
這個是替換變量值的內(nèi)容,看例子
@echo off
set a= bbs. verybat. cn
echo 替換前的值: "%a%"
set var=%a: =%
echo 替換后的值: "%var%"
pause

運行顯示:(龍卷風(fēng)添加)
替換前的值: " bbs. verybat. cn"
替換后的值: "bbs.verybat.cn"

對比一下,我們發(fā)現(xiàn)他把變量%a%的空格給替換掉了,從這個例子,我們就可以發(fā)現(xiàn)
%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是要進行字符替換的變量的值,"."為要替換的值,
"傷腦筋"為替換后的值!
執(zhí)行后就會把變量%a%里面的"."全部替換為"傷腦筋"
這就是set的替換字符的很好的功能! 替換功能先講到這,下面將字符串截取功能

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


2、字符串截取

**********************************************
截取功能統(tǒng)一語法格式為:%a:~[m[,n]]%
**********************************************
方括號表示可選,%為變量標(biāo)識符,a為變量名,不可少,冒號用于分隔變量名和說明部分,符號~可以簡單理解為“偏移”即可,m為偏移量(缺省為0),n為截取長度(缺省為全部)


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

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

執(zhí)行后,我們會發(fā)現(xiàn)只顯示了"bs"兩個字母,我們的變量%a%的值不是為bbs.verybat.cn嗎?
怎么只顯示了第2個字母和第3個字母"bs",分析一結(jié)果我們就可以很容易看出
%PATH:~10,5%就是顯示變量PATH里從11位(偏移量10)開始的5個字符!
分析set var=%a:~1,2%
set是命令,var是變量值,a要進行字符操作的變量,"1"從變量"a"第幾位開始顯示,"2"表示顯示幾位。
合起來就是把變量a的值從第2位(偏移量1)開始,把2個字符賦予給變量var
這樣應(yīng)該明白了吧~

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

%PATH:~-10% 看例子

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

當(dāng)然我們也可以改成這樣
截取功能例子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
執(zhí)行后,我們發(fā)現(xiàn)顯示的是"bbs.verybat",少了".cn"
從結(jié)果分析,很容易分析出,這是把變量a的值從0位開始,
到倒數(shù)第三位之間的值全部賦予給var

如果改成這樣

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

講得好,例子就是說明問題,為便于記憶,龍卷風(fēng)小節(jié)如下:
a=bbs.verybat.cn
%a:~1,2%   =“bs”   偏移量1,從第二位開始向右取2位
%a:~-3%    =“.cn” 偏移量負(fù)3,即倒數(shù)3位(也可理解為留下右邊3位),右取全部
%a:~3%     =“.verybat.cn” 偏移量3(也可理解為去掉左邊3位),右取全部
%a:~0,-3%   =“bbs.verybat” 偏移量0,右取長度至負(fù)3,即倒數(shù)3位
%a:~2,-3%   =“s.verybat” 偏移量2,右取長度至負(fù)3,即倒數(shù)3位

**********************************************
所以,截取功能統(tǒng)一語法格式為:%a:~[m[,n]]%
**********************************************
方括號表示可選,%a%為變量名,不可少,冒號用于分隔變量名和說明部分,符號~可以簡單理解為“偏移”即可,m為偏移量(缺省為0),n為截取長度(缺省為全部)
上面所述用法其實相當(dāng)于vbs函數(shù)mid、left、right
%a:~0,n% 相當(dāng)于函數(shù)left(a,n) 取左邊n位
%a:~-m% 相當(dāng)于函數(shù)right(a,m) 取右邊m位
%a:~m,n% 相當(dāng)于函數(shù)mid(a,m+1,n) 從m+1位開始取n位
%a:~m,-n% 相當(dāng)于函數(shù)mid(a,m+1,len(a)-m-n),從m+1位開始,至倒數(shù)n+1位
%a:~m % 相當(dāng)于函數(shù)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
::---------字符串長度計算子程序
::---------參數(shù)%1為字符串(如有空格,請用引號括起來)
::---------參數(shù)%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 傷腦筋

休息休息!

詩曰:  

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

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲中文字幕有码在线观看| 国内精品伊人久久久av高清| 色婷婷在线精品国自产拍| 欧美大黄片在线免费观看| 亚洲精品中文字幕欧美| 丝袜视频日本成人午夜视频| 亚洲二区欧美一区二区| 亚洲一区二区亚洲日本| 亚洲精品国产精品日韩| 国产又粗又深又猛又爽又黄| 国产精品视频一区麻豆专区| 国产日韩欧美在线播放| 久久91精品国产亚洲| 99久久国产精品亚洲| 日本欧美三级中文字幕| 日本熟妇五十一区二区三区| 日韩精品福利在线观看| 国产精品午夜福利免费阅读| 激情内射日本一区二区三区| 人妻熟女中文字幕在线| 国产精品美女午夜视频| 中文字幕人妻一区二区免费| 中文字幕亚洲在线一区| 国产原创中文av在线播放| 风韵人妻丰满熟妇老熟女av| 夫妻性生活真人动作视频| 日韩特级黄片免费观看| 国产成人精品资源在线观看| 深夜视频在线观看免费你懂| 久久99青青精品免费观看| 美女被后入福利在线观看| 极品少妇嫩草视频在线观看| 日本精品中文字幕在线视频| 一级片二级片欧美日韩| 精品丝袜一区二区三区性色| 欧美日韩一区二区综合| 午夜福利大片亚洲一区| 久久永久免费一区二区| 成人综合网视频在线观看| 99久只有精品免费视频播放| 亚洲成人精品免费在线观看|