set命令


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

格式:set [variable=[string]]

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

 

1

@echo off

set var=abcd

echo %var%

pause

 

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

 

注意:以下用法將清除變量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

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

三、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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM