set命令

一,           set 命令設置自定義變量html

格式:set [variable=[string]]express

 variable 指定環境變量名。 string 指定要指派給變量variable的一系列字符串。工具

 

1學習

@echo offspa

set var=abcd命令行

echo %var%xml

pausehtm

 

在例1中,set var=abcd 是批處理設置變量的方法。Var是變量名,而abcd則是變量名var的值。echo %var% ,在批處理中咱們要引用這個變量就把var 變量名用兩個%(百分號)擴起來,%var%blog

 

注意:如下用法將清除變量variable 的值,使其變成未定義狀態。字符串

set variable=

上面等號後面無任何符號,若是寫成SET variable="",此時變量值並不爲空,而是等於兩個引號,即"" 

2,

@echo off

set var=

set var1=""

if defined var (echo var的值爲%var%) else echo var沒有賦值
if defined var1 (echo var1
的值爲%var1%) else echo var1沒有賦值

pause

 

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

3,

@echo off

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

echo  您輸入了%var%

pause

 

執行上面的批處理時,系統會提示你:「請輸入變量的值:」仍是本身動手嘗試一下吧,呵呵!

 

 

二,           set 命令進行字符串處理

 

1、字符串替換

格式:%PATH:str1=str2%

意思就是:將字符串變量%PATH%中的str1 替換爲str2

 

4

@echo off

set a= bbs. bathome. cn

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

set var=%a: =%

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

pause

 

執行後顯示:

替換前的值: " bbs. bathome. cn"

替換後的值: "bbs.bathome.cn"

 

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

5,

@echo off

set a= bbs.bathome.cn

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

set var=%a:.=小情%

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

pause

 

執行後顯示:

替換前的值: " bbs.bathome.cn"

替換後的值: " bbs小情bathome小情cn"

 

這裏是把變量%a%裏面的"."所有替換爲"小情",你們多多動手練習就會了,這個沒有什麼難的,呵呵~~

 

 

2、字符串截取

格式:%a:~[m[,n]]%

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

6,

@echo off

set a=bbs.bathome.cn

set var=%a:~1,3%

echo %var%

pause

 

執行顯示爲:bs.

咱們來分析一下set var=%a:~1,3% ,這裏%a:~1,3%就是說變量 a  偏移量爲1,要截取它的3位字符長度。合起來就是把變量a 的值從第2 位(偏移量 1)開始,截取3 個字符賦予變量var

7,

@echo off

set a=bbs.bathome.cn

set var=%a:~1,-3%

echo %var%

pause

 

執行顯示:bs.bathome

這裏就是把變量a 2位起到倒數第3位前的值賦予var

8,

@echo off

set a=bbs.bathome.cn

set var=%a:~-3%

echo %var%

pause

 

執行顯示:.cn

這裏就是就是把變量a 倒數 3 位的值賦予變量var

9,

@echo off

set a=bbs.bathome.cn

set var=%a:~-3,2%

echo %var%

pause

 

執行顯示:.c

 

這裏就是就是把變量a 倒數 3 位的值的前2位賦予變量var

10,

@echo off

set a=bbs.bathome.cn

set var=%a:~3%

echo %var%

pause

 

執行顯示:.bathome.cn

這裏就是把變量a 從第3 位開始後面所有的值給變量var

 

上面這幾個例子要好好的記住哦,並且不要記錯了!

咱們仍是總結一下吧:

a=bbs.bathome.cn

 

%a:~1,3%    -------- bs.        變量a 偏離1位,截取3位字符。

 

%a:~1,-3%   -------- bs.bathome變量a 偏離1位,截取倒數第3位前的字符。

 

%a:~-3%    -------- .cn        變量a 偏離-3位,截取倒數的3位字符。

 

%a:~-3,2%   -------- .c        變量a 偏離-3位,截取倒數後3位的前兩2位字符

 

%a:~3%     -------- .bathome.cn」變量a 偏離3位,截取完後面的字符。

 

咱們來道綜合題:輸入任意字符串,求字符串的長度

11

@echo off

set /p str=請輸入任意長度的字符串:

echo  你輸入了字符串:"%str%"

call :stringlenth "%str%" num

echo  字符串長度爲:%num%

pause

:stringLenth

::字符串長度計算子程序

set thestring=%~1

::參數%1 爲字符串"%str%"%~1則去掉"%str%"的雙引號。

if not defined theString goto :eof

set Return=0

:stringLenth_continue

set /a Return+=1

set thestring=%thestring:~0,-1%

::偏移量爲1,截取倒數第1位前的全部字符。

if defined thestring goto stringLenth_continue

if not "%2"=="" set %2=%Return%

::參數%2爲返回變量num的名稱,不能含空格或特殊字符。

goto :eof

 

 

最後,提供一下batmat寫的一個例子幫助你們對截取字符的理解吧:

 

例子:

@echo off&color a&mode con cols=90 lines=12

title 截取字符練習工具 by bat-zw19750516

set var=1234567890一二三四五六七八九零

cls&echo.&echo  原始圖案爲:%var%

echo.&echo  注意前面有10個阿拉伯數字後面有10個語文數字,等下截取後記得看下。

echo.&echo  命令形式爲:%%var:~m,n%%,其中的m爲第一個參數可負可正可爲零,n爲第二個參數可負可正不爲零。

echo.&echo  爲了方便重複練習沒有設置退出,要退出請直接關閉窗口。

echo.&echo  請按任意鍵開始練習。&pause>nul

 

:begin

set a=&set b=&set "c="

cls&echo.&set /p a= 請輸入第一個參數(應爲小於20的整數):

echo %a:-=%|findstr "[^0-9]"&&goto wrong

if "%a%" equ "" goto wrong

if %a% geq 20 goto wrong

cls&echo.&set /p b= 請輸入第二個參數(應爲大於-20並不爲零的整數):

echo %b:-=%|findstr "[^0-9]"&&goto wrong

if "%b%" equ "" goto wrong

if %b% equ 0 goto wrong

if %b% lss -20 goto wrong

set /a c=20-a+b

if %a% lss 0 if %b% lss 0 if %a% geq %b% goto wrong

if %a% gtr 0 if %b% lss 0 if %c% leq 0 goto wrong

cls&echo.&echo  原始圖案爲: %var%

echo.&echo  你輸入的截取命令是: %%var:~%a%,%b%%%

echo.&call,echo  截取到的圖案是%%var:~%a%,%b%%%

echo.&echo  請按任意鍵再次練習。&pause>nul&goto begin

 

:wrong

cls&echo.&echo  輸入不合要求,請正確輸入。&ping /n 2 127.1 >nul&goto begin

 出處:http://blog.sina.com.cn/s/blog_76dbbd7e0100qzid.html

====================================================================

3、set 命令進行簡單計算

格式:set /a expression

/a 命令行開關指定等號右邊的字符串爲被評估的數字表達式。該表達式評估器很簡單並以遞減的優先權順序支持下列操做:

 

  ( )             分組

  !  ~  -        一元運算符

  *  /  %       算數運算符

  + -           算數運算符

  <<   >>       二進制邏輯移位

  &             二進制按位「與」

  ^              二進制按位「異」

  |              二進制按位「或」

  =  *=  /=   %= += -=           算數賦值

  &=  ^=  |=  <<=   >>=          二進制運算賦值

  ,                                   表達式分隔符

 

set /a 參數就是讓set 能夠支持數學符號進行加減等一些數學運算,注意:通常的運算常爲十進制運算.仍是先來看看例子吧

12,

@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

請按任意鍵繼續. . .

 

咱們來看一看下面的這個例子

13,

@echo off

set /a a=1+1,b=2+1,c=3+1

echo  計算結果:%a% %b% %c%

pause

 

執行顯示:計算結果:2 3 4

 

發現其餘數學運算也有效果!,這就是表達式分隔符""號的做用!

有時候咱們須要直接在原變量進行加減操做就能夠用這種語法,

set /a var+=1對應原始語法就是set /a var = %var% + 1

set /a var*=2對應原始語法就是set /a var = %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 次方

參考答案:

14,

@echo off

set /p n=請輸入2 的幾回方:

set /a num=1^<^<n

echo %num%

pause

 

想一下這個究竟是怎麼運算的?呵呵,這就留給你們思考了!

 好了,關於set 命令的也就講到這裏吧,之後有什麼要補充的再補上了。

 還有一些其餘的總結命令,也能夠參考個人另一篇文章:批處理(bat)命令學習的一些總結

出處:http://blog.sina.com.cn/s/blog_76dbbd7e0100qzic.html

相關文章
相關標籤/搜索