set命令詳解
一, 用set 命令設置自定義變量作用:顯示、設置或刪除 cmd.exe 環(huán)境變量。 格式: SET [variable]=[string] variable 指定環(huán)境變量名。 string 指定要指派給變量的一系列字符串。 說明: 1) set : 顯示所有環(huán)境變量 2) set var= : 清楚var的值 3) %var% : 引用變量的值 舉例: d:\cmd\04>set myVar=123 d:\cmd\04>echo %myVar% 123 格式: SET /P variable=[promptString] variable, 變量名 promptString, 提示信息 說明: 提供一個交互界面,讓用戶自己輸入變量的值, 舉例: d:\cmd\04>set /p var=input value: & @echo %var% input value: 123 123 二, 用set 命令進行簡單計算格式:SET /A expression 說明: /A 命令行開關指定等號右邊的字符串為被評估的數(shù)字表達式。 該表達式評估器很簡單,并以遞減的優(yōu)先權順序支持下列操作: () 分組 ! ~ - 一元運算符 * / % 算數(shù)運算符 + - 算數(shù)運算符 << >> 二進制邏輯移位 & 二進制按位“與” ^ 二進制按位“異” | 二進制按位“或” = *= /= %= += -= 算數(shù)賦值 &= ^= |= <<= >>= 二進制運算賦值 , 表達式分隔符 十進制數(shù)字 : 不帶前綴, 如 98 八進制數(shù)字 : 前綴 0 (零), 如 0123 十六進制數(shù)字:前綴 0x , 0xFF 舉例: 1, d:\cmd\04>set num=123 d:\cmd\04>echo %num% 123 d:\cmd\04>set /a num=4%num% 4123 d:\cmd\04>set /a num=%num%-23 4100 2, 計算器功能 2.bat => @echo off set /p expression=輸入計算表達式: set /a var=%expression% echo %expression%=%var% pause MS-DOS => d:\cmd\04>2.bat 輸入計算表達式:1+2+3/2 1+2+3/2=4 表達式: 3, 逗號 d:\cmd\04>set /a a=1+1,b=2+2 4 d:\cmd\04>echo %a%, %b% 2, 4 4, 直接在變量上運算 d:\cmd\04>set a=1 d:\cmd\04>set /a a+=10 11 5, 邏輯運算(需要將運算符用雙引號包裹,或使用轉(zhuǎn)義符^) 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 6, 2的N次方 3.bat => 變量無需用 "%%" 包裹 @echo off set /p n=請輸入2的冪: set /a num=1 "<<" n echo %num% pause 三, 用set 命令進行字符串處理1、字符串替換格式: %variable:targetStr=replacementStr% variable : 變量名 targetStr : 需要替換的字符串 replacementStr: 替換后的內(nèi)容 舉例: d:\cmd\04>set a=www. baidu.com d:\cmd\04>echo %a% www. baidu.com ----------------------------------------- d:\cmd\04>set var=%a: =% // 去掉空格 d:\cmd\04>echo %var% www.baidu.com d:\cmd\04>set var=%a:.=#% // 將"."換成"#" d:\cmd\04>echo %var% www# baidu#com ------------------------------------------ d:\cmd\04>echo %a: =% www.baidu.com d:\cmd\04>echo %a:.=#% www# baidu#com 2, 字符串截取 格式: %variable:~[ start [, length] ]% start : 從第幾個字符開始, 缺省為0 正數(shù)(+p), 總左邊數(shù)p個 負數(shù)(-p), 從右邊數(shù)p個 length : 截取多少個, 缺省則取到末尾 正數(shù)(+n), n個 負數(shù)(-n), 總數(shù)-n 個 舉例: d:\cmd\04>echo %b% 0123456789 d:\cmd\04>echo %b:~1,4% 1234 d:\cmd\04>echo %b:~-3% 789 d:\cmd\04>echo %b:~0,-3% 0123456 總結: a=bbs.wuyou.com%a:~1,2% =“bs” 偏移量 1,從第二位開始向右取 2 位 %a:~-3% =“com ” 偏移量負 3,即倒數(shù) 3 位(也可理解為留下右邊 3 位),右取全部 %a:~3% =“.wuyou.com ” 偏移量 3(也可理解為去掉左邊 3 位),右取全部 %a:~0,-3% =“bbs.wuyou.” 偏移量 0,右取長度至負 3,即倒數(shù) 3 位 %a:~2,-3% =“s.wuyou.” 偏移量2,右取長度至負 3,即倒數(shù) 3 位 思考: 輸入任意字符串, 求其長度 @echo off set /p targetStr=請輸入任意長度的字符串: echo 您輸入的字符串為: "%targetStr%" :: 參數(shù)1, 傳入的字符串, 如有空格, 請用雙引號 括起來 :: 參數(shù)2, 返回變量的名稱 call :getStringLen "%targetStr%" len echo "%targetStr%" 的長度為: %len% :: 參數(shù)1, 傳入的字符串, 如有空格, 請用雙引號 括起來 :: 參數(shù)2, 返回變量的名稱 :getStringLen set theString=%~1 set count=0 :continue set /a count+=1 set theString=%theString:~0,-1% rem 如果theString未定義或者值為空 if defined theString goto continue if not "%2"=="" set %2=%count% goto :eof |
|