一, 用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)命令學習的一些總結