天天看點

BAT教程 :第五節(set指令詳解)

先回顧一下他設定自定義變量的用法

例子:

@echo off

setvar=我是值

echo%var%

pause

請看setvar=我是值,

set是指令   var是變量名  =号右邊的"我是值"是變量的值

在批進行中我們要引用這個變就把var變量名用兩個%(百分号)擴起來,如%var%

這種set文法隻能直接在bat代碼的提前賦予變量的值,有時候我們需要提供一個互動界面,讓

使用者自己輸入變量的值,然後我們在來根據這個值來做相應操作,現在我就來說說這set的這

種文法,隻需要加一個"/p"

set/p var=請輸入變量的值:

if%var%==1 echo 您輸入了 1~_~

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%

這機種文法有什麼用處呢?

set/a expression  

/a 指令行開關指定等号右邊的字元串為被評估的數字表達式。該表達式

評估器很簡單并以遞減的優先權順序支援下列操作:

    ()                  -分組

    !~-               -一進制運算符

    */%               -算數運算符

    +-                 -算數運算符

    <<>>               -邏輯移位

    &                  -按位“與”

    ^                  -按位“異”

    |                  -按位“或”

    =*=/=%=+=-=   -指派

      &=^=|=<<=>>=

    ,                  -表達式分隔符

上面這些是系統幫助裡的内容,看着是不是有點暈,沒關系我來簡單解釋一下:

set的/

現在開始舉例子介紹這些數學符号的用法:

看例子 這裡的例子請直接在cmd下拷貝指令運作,

set/a var=1+1  

set/a 文法,var變量名 1+1 數學式子

拷貝運作後會直接顯示一個2,或者運作完後我們輸入echo%var%,也是二,這就是

set/a var=2-1  結果是多少呢?如果你看不到結果就echo%var%.....

set/a var=2*2 乘法運算

set/a var=2/2 除法運算

set/a var=(1+1)+(1+1)結果等于4

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=2"<<"2 次方運算

set/a var=4">>"2 這個不太記得數學裡的叫法....

還有幾個數學不太行,搞不清楚了....不列出來了,

這些符号也可以用&=^=|=<<=>>=這樣的簡單用法如

set/a var"&="1 等于set/a var=%var%"&"1 注意引号

好符号說到這,現在說%path:str1=str2%

這個是替換變量值的内容,看例子

seta=bbs.verybat.cn

echo 替換前的值:"%a%"

setvar=%a:=%

echo 替換後的值:"%var%"

對比一下,我們發現他把變量%a%的空格給替換掉了,從這個例子,我們就可以發現

%path:str1=str2%這個操作就是把變量%path%的裡的str1全部用str2替換

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

setvar=%a:.=傷腦筋%

解釋set var=%a:.=傷腦筋%

    set指令 var變量名 字a是要進行字元替換的變量的值,"."為要替換的值,

"傷腦筋"

執行後就會把變量%a%裡面的"."全部替換為"傷腦筋"

這就是set的替換字元的很好的功能!先講到這

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

setvar=%a:~1,2%

執行後,我們會發現隻顯示了"bs"兩個字母,我們的變量%a%的值不是為bbs.verybat.cn嗎

怎麼隻顯示了第2個字母和第3個字母"bs",分析一結果我們就可以很容易看出

分析set var=%a:~1,2%

  set指令 var變量值  a要進行字元操作的變量"1"從變量"a"第幾位開始顯示"2"顯示幾位

和起來就是把變量a的值從第一位開始,把後兩位賦予給變量var

就樣因該明白了吧~

其他兩種文法

他們也是顯示指定變量指定幾位的值得的意思

%path:~-10%例子

setvar=%a:~-3%

這個就是把變量a倒數3位的值給變量var

當然我們也可以改成這樣

setvar=%a:~3%

這個就是把變量a的從第3位開始後面全部的值給變量var

%path:~0,-2%  例子

setvar=%a:~0,-3%

執行後,我們發現顯示的是"bbs.verybat",少了".cn"

從結果分析,很容易分析出,這是把變量a的值從0位開始,

到倒數第三位之間的值全部賦予給var

如果改成這樣

setvar=%a:~2,-3%

那麼他就是顯示從第2位開始減去倒數三位字元的值,并賦予給變量var

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