主頁(yè) > 知識(shí)庫(kù) > DOS批處理高級(jí)教程 第五章 set命令詳解

DOS批處理高級(jí)教程 第五章 set命令詳解

熱門標(biāo)簽:如何申請(qǐng)400電話業(yè)務(wù)mm 電話機(jī)器人產(chǎn)品怎么樣 玉林市機(jī)器人外呼系統(tǒng)哪家好 清遠(yuǎn)百度地圖標(biāo)注店鋪位置 智能打電話機(jī)器人收費(fèi) 雷霆電銷機(jī)器人怎么樣 呼倫貝爾外呼系統(tǒng) 如何弄地圖標(biāo)注 電話機(jī)器人全國(guó)招商

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

顯示、設(shè)置或刪除 cmd.exe 環(huán)境變量。

SET [variable=[string]]

variable 指定環(huán)境變量名。
string 指定要指派給變量的一系列字符串。

要顯示當(dāng)前環(huán)境變量,鍵入不帶參數(shù)的 SET。

SET 命令不允許變量名含有等號(hào)。

注意:以下用法將清除變量variable的值,使其變成未定義狀態(tài)。

SET variable=

上面等號(hào)后面無(wú)任何符號(hào),如果寫成SET variable="",此時(shí)變量值并不為空,而是等于兩個(gè)引號(hào),即""

例子:

@echo off
 set var=我是值
 echo %var%
 pause

看 set var=我是值 ,這就是BAT直接在批處理中設(shè)置變量的方法!

set 是命令 var是變量名 =號(hào)右邊的"我是值"是變量的值

在批處理中我們要引用這個(gè)變就把var變量名用兩個(gè)%(百分號(hào))擴(kuò)起來(lái),如%var%

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

SET /P variable=[promptString]

例子:

@echo off
set /p var=請(qǐng)輸入變量的值:
echo 您輸入了 %var% ~_~
pause

set /p 是命令語(yǔ)法  var是變量名    =號(hào)右邊的"請(qǐng)輸入變量的值: ",這個(gè)是提示語(yǔ),不是變量的值了!
運(yùn)行后,我們?cè)谔崾菊Z(yǔ)后面直接輸入1,就會(huì)顯示一行您輸入了 1 ~_~

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

使用set /?查看SET的幫助我們發(fā)現(xiàn)SET除了我上面講的
SET [variable=[string]]
SET /P variable=[promptString]

這兩種語(yǔ)法外,還有如下幾種語(yǔ)法:
SET /A expression

環(huán)境變量替換已如下增強(qiáng):
%PATH:str1=str2%
%PATH:~10,5%
%PATH:~-10%
%PATH:~0,-2%

這機(jī)種語(yǔ)法有什么用處呢?下面我們來(lái)一個(gè)個(gè)講解他們!

二、用set命令進(jìn)行簡(jiǎn)單計(jì)算

語(yǔ)法:SET /A expression

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

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

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

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

例:

set aa=0812
set /a aa=1%aa%-10000
echo %aa%

結(jié)果為:812

例:

@echo off
set /p input=請(qǐng)輸入計(jì)算表達(dá)式:
set /a var=%input%
echo 計(jì)算結(jié)果:%input%=%var%
pause

上面的例子是龍卷風(fēng)設(shè)計(jì)的,很好用喲,請(qǐng)看下面幾個(gè)運(yùn)算過(guò)程:

注意:DOS計(jì)算只能進(jìn)行整數(shù)運(yùn)算,精確到整數(shù)

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

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

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

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

請(qǐng)輸入計(jì)算表達(dá)式:(25+75)*2/(15+5)   #括號(hào)
計(jì)算結(jié)果:(25+75)*2/(15+5)=10
請(qǐng)按任意鍵繼續(xù). . .

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

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

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

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

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

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

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

另外還有一些用邏輯或取余操作符,這些符號(hào),按照上面的使用方法會(huì)報(bào)錯(cuò)的

比如我們?cè)贑MD里輸入set /a var=1 1 "與運(yùn)算",他并不會(huì)顯示為1,而是報(bào)錯(cuò),為什么?對(duì)于這樣的"邏輯或取余操作符",我們需要把他們用雙引號(hào)引起來(lái),也可以用轉(zhuǎn)義字符^,看例子

set /a var= 1 "" 1 這樣結(jié)果就顯示出來(lái)了,其他邏輯或取余操作符用法
set /a var= 1 "+" 1 異運(yùn)算
set /a var= 1 "%" 1  取模運(yùn)算
set /a var= 3 "" 2 左移位運(yùn)算, 3的二進(jìn)制為11,左移2位為1100,換成十進(jìn)制就是12,自行驗(yàn)證
set /a var= 4 ">>" 2右移位運(yùn)算,4的二進(jìn)制為100,右移動(dòng)2位為1,結(jié)果為1

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

思考題:求2的n次方
參考答案:

@echo off
set /p n=請(qǐng)輸入2的幾次方: 
set /a num=1^^n
echo %num%
pause

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

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

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

三、用set命令進(jìn)行字符串處理

1、字符串替換

好了,符號(hào)說(shuō)到這,現(xiàn)在說(shuō)%PATH:str1=str2%
上面語(yǔ)法的意思就是:將字符串變量%PATH%中的str1替換為str2
這個(gè)是替換變量值的內(nèi)容,看例子

@echo off
set a= bbs. verybat. cn
echo 替換前的值: "%a%"
set var=%a: =%
echo 替換后的值: "%var%"
pause

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

對(duì)比一下,我們發(fā)現(xiàn)他把變量%a%的空格給替換掉了,從這個(gè)例子,我們就可以發(fā)現(xiàn)
%PATH:str1=str2%這個(gè)操作就是把變量%PATH%的里的str1全部用str2替換

比如我們把上面的例子改成這樣

@echo off
set a=bbs.verybat.cn
echo 替換前的值: "%a%"
set var=%a:.=傷腦筋%
echo 替換后的值: "%var%"
pause

運(yùn)行顯示:
替換前的值: "bbs.verybat.cn"
替換后的值: "bbs傷腦筋verybat傷腦筋cn"

解釋set var=%a:.=傷腦筋%
set是命令 var是變量名 字a是要進(jìn)行字符替換的變量的值,"."為要替換的值,
"傷腦筋"為替換后的值!
執(zhí)行后就會(huì)把變量%a%里面的"."全部替換為"傷腦筋"
這就是set的替換字符的很好的功能! 替換功能先講到這,下面將字符串截取功能

請(qǐng)注意:字符串的替換和截取功能在引用變量的地方均可以,并不一定必須要有set命令
例:

@echo off
set a=bbs.verybat.cn
echo 替換前的值: "%a%"
echo 替換后的值: "%a:.=傷腦筋%"
pause

此例在echo語(yǔ)句中就替換了字符串,效果一樣。

2、字符串截取

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

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

截取功能例子1:

@echo off
set a=bbs.verybat.cn
set var=%a:~1,2%
echo %var%
pause

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

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

%PATH:~-10% 看例子

截取功能例子2:

@echo off
set a=bbs.verybat.cn
set var=%a:~-3%
echo %var%
pause

運(yùn)行結(jié)果:.cn
這個(gè)就是把變量a倒數(shù)3位的值給變量VAR

當(dāng)然我們也可以改成這樣
截取功能例子3:

@echo off
set a=bbs.verybat.cn
set var=%a:~3%
echo %var%
pause

運(yùn)行顯示:.verybat.cn
這個(gè)就是把變量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

運(yùn)行顯示:s.verybat
那么他就是顯示從第3位(偏移量2)開始減去倒數(shù)三位字符的值,并賦予給變量var

講得好,例子就是說(shuō)明問(wèn)題,為便于記憶,龍卷風(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,右取長(zhǎng)度至負(fù)3,即倒數(shù)3位
%a:~2,-3% =“s.verybat” 偏移量2,右取長(zhǎng)度至負(fù)3,即倒數(shù)3位

**********************************************
所以,截取功能統(tǒng)一語(yǔ)法格式為:%a:~[m[,n]]%
**********************************************
方括號(hào)表示可選,%a%為變量名,不可少,冒號(hào)用于分隔變量名和說(shuō)明部分,符號(hào)~可以簡(jiǎn)單理解為“偏移”即可,m為偏移量(缺省為0),n為截取長(zhǎng)度(缺省為全部)
上面所述用法其實(shí)相當(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位開始取右邊全部。

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

@echo off
set /p str=請(qǐng)輸入任意長(zhǎng)度的字符串:
echo 你輸入了字符串:"%str%"
call :stringlenth "%str%" num
echo 字符串長(zhǎng)度為:%num%
pause
exit

:StringLenth
::---------字符串長(zhǎng)度計(jì)算子程序
::---------參數(shù)%1為字符串(如有空格,請(qǐng)用引號(hào)括起來(lái))
::---------參數(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

如果想了解更多關(guān)于set命令的方法可以參考下面的方法。

您可能感興趣的文章:
  • set /p= 命令使用詳解

標(biāo)簽:三門峽 蕪湖 白銀 公主嶺 臺(tái)州 株洲 樂山 江西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《DOS批處理高級(jí)教程 第五章 set命令詳解》,本文關(guān)鍵詞  DOS,批處理,高級(jí),教程,第五,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《DOS批處理高級(jí)教程 第五章 set命令詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于DOS批處理高級(jí)教程 第五章 set命令詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章