批處理命令學(xué)習(xí)之:set命令詳解 學(xué)習(xí)要點: 1.用set 命令設(shè)置自定義變量 2.用set 命令進行字符串處理 3.用set 命令進行簡單計算 —————————————————————————————————– 一、用set 命令設(shè)置自定義變量 格式:set [variable=[string]] variable 指定環(huán)境變量名。 string 指定要指派給變量variable的一系列字符串。 —————————————————————————————————– 例1, @echo off set var=abcd echo %var% pause 在例1中,set var=abcd 是批處理設(shè)置變量的方法。Var是變量名,而abcd則是變量名var的值。echo %var% ,在批 處理中我們要引用這個變量就把var 變量名用兩個%(百分號)擴起來,如%var% 注意:以下用法將清除變量variable 的值,使其變成未定義狀態(tài)。 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還可以提供一個交互界面,讓用戶自己輸入變量的值,然后我們在來根據(jù)這個值來做相應(yīng)操作,現(xiàn)在我就來說說set 的這種語法,只需要加一個”/P”參數(shù)就可以了! 例3, @echo off set /p var=請輸入變量的值: echo您輸入了%var% pause 執(zhí)行上面的批處理時,系統(tǒng)會提示你:“請輸入變量的值:”還是自己動手嘗試一下吧,呵呵! —————————————————————————————————– 二、用set 命令進行字符串處理 1、字符串替換 格式:%PATH:str1=str2% 意思就是:將字符串變量%PATH%中的str1 替換為str2 —————————————————————————————————– 例4, @echo off set a= bbs. bathome. cn echo替換前的值: “%a%” set var=%a: =% echo替換后的值: “%var%” pause 執(zhí)行后顯示: 替換前的值: ” bbs. bathome. cn” 替換后的值: “bbs.bathome.cn” 對比一下,我們發(fā)現(xiàn)它把變量%a%的空格給替換掉了,而%PATH:str1=str2%這個操作就是把變量%PATH%的里的str1 全 部用str2 替換。 例5, @echo off set a= bbs.bathome.cn echo替換前的值: “%a%” set var=%a:.=小情% echo替換后的值: “%var%” pause 執(zhí)行后顯示: 替換前的值: ” bbs.bathome.cn” 替換后的值: ” bbs小情bathome小情cn” 這里是把變量%a%里面的”.”全部替換為”小情”,大家多多動手練習(xí)就會了,這個沒有什么難的,呵呵~~ —————————————————————————————————– 2、字符串截取 格式:%a:~[m[,n]]% 方括號表示可選,%為變量標(biāo)識符,a為變量名,不可少,冒號用于分隔變量名和說明部分,符號~可以簡單理解為“ 偏移”即可,m 為偏移量(缺省為0),n 為截取長度(缺省為全部) —————————————————————————————————– 例6, @echo off set a=bbs.bathome.cn set var=%a:~1,3% echo %var% pause 執(zhí)行顯示為: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 執(zhí)行顯示:bs.bathome 這里就是把變量a 第2位起到倒數(shù)第3位前的值賦予var 例8, @echo off set a=bbs.bathome.cn set var=%a:~-3% echo %var% pause 執(zhí)行顯示:.cn 這里就是就是把變量a 倒數(shù) 3 位的值賦予變量var 例9, @echo off set a=bbs.bathome.cn set var=%a:~-3,2% echo %var% pause 執(zhí)行顯示:.c 這里就是就是把變量a 倒數(shù) 3 位的值的前2位賦予變量var 例10, @echo off set a=bbs.bathome.cn set var=%a:~3% echo %var% pause 執(zhí)行顯示:.bathome.cn 這里就是把變量a 從第3 位開始后面全部的值給變量var 上面這幾個例子要好好的記住哦,而且不要記錯了! 我們還是總結(jié)一下吧: a=bbs.bathome.cn %a:~1,3% ——– “bs.” 變量a 偏離1位,截取3位字符。 %a:~1,-3% ——– “bs.bathome” 變量a 偏離1位,截取倒數(shù)第3位前的字符。 %a:~-3% ——– “.cn” 變量a 偏離-3位,截取倒數(shù)的3位字符。 %a:~-3,2% ——– “.c” 變量a 偏離-3位,截取倒數(shù)后3位的前兩2位字符 %a:~3% ——– “.bathome.cn”變量a 偏離3位,截取完后面的字符。 %a:~,3% ——– “bbs” 變量a 偏離0位,截取3位字符。 —————————————————————————————————– 我們來道綜合題:輸入任意字符串,求字符串的長度 例11, @echo off set /p str=請輸入任意長度的字符串: echo你輸入了字符串:”%str%” call :stringlenth “%str%” num echo字符串長度為:%num% pause :stringLenth ::字符串長度計算子程序 set thestring=%~1 ::參數(shù)%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,截取倒數(shù)第1位前的所有字符。 if defined thestring goto stringLenth_continue if not “%2″==”” set %2=%Return% ::參數(shù)%2為返回變量num的名稱,不能含空格或特殊字符。 goto :eof —————————————————————————————————– 最后,提供一下batmat寫的一個例子幫助大家對截取字符的理解吧: 例子: @echo off&color a&mode con cols=90 lines=12 title 截取字符練習(xí)工具 by bat-zw19750516 set var=1234567890一二三四五六七八九零 cls&echo.&echo原始圖案為:%var% echo.&echo注意前面有10個阿拉伯?dāng)?shù)字后面有10個語文數(shù)字,等下截取后記得看下。 echo.&echo命令形式為:%%var:~m,n%%,其中的m為第一個參數(shù)可負(fù)可正可為零,n為第二個參數(shù)可負(fù)可正不為零。 echo.&echo為了方便重復(fù)練習(xí)沒有設(shè)置退出,要退出請直接關(guān)閉窗口。 echo.&echo請按任意鍵開始練習(xí)。&pause>nul :begin set a=&set b=&set “c=” cls&echo.&set /p a= 請輸入第一個參數(shù)(應(yīng)為小于20的整數(shù)): echo %a:-=%|findstr “[^0-9]”&&goto wrong if “%a%” equ “” goto wrong if %a% geq 20 goto wrong cls&echo.&set /p b= 請輸入第二個參數(shù)(應(yīng)為大于-20并不為零的整數(shù)): 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請按任意鍵再次練習(xí)。&pause>nul&goto begin :wrong cls&echo.&echo輸入不合要求,請正確輸入。&ping /n 2 127.1 >nul&goto begin —————————————————————————————————–
三、用set 命令進行簡單計算 格式:set /a expression /a 命令行開關(guān)指定等號右邊的字符串為被評估的數(shù)字表達式。該表達式評估器很簡單并以遞減的優(yōu)先權(quán)順序支持下 列操作: ( ) 分組 !~– 一元運算符 */% 算數(shù)運算符 – 算數(shù)運算符 << >> 二進制邏輯移位 & 二進制按位“與” ^ 二進制按位“異” | 二進制按位“或” = *= /= %==-= 算數(shù)賦值 &= ^= |= <<= >>= 二進制運算賦值 , 表達式分隔符 set 的/a 參數(shù)就是讓set 可以支持?jǐn)?shù)學(xué)符號進行加減等一些數(shù)學(xué)運算, 注意:一般的運算常為十進制運算. —————————————————————————————————– 例12, @echo off set /p input=請輸入計算表達式: set /a var=%input% echo計算結(jié)果:%input%=%var% pause 注意:DOS 計算只能進行整數(shù)運算,精確到整數(shù),它是不支持浮點計算的! 請輸入計算表達式:1 9 20 30-10 計算結(jié)果:1 9 20 30-10=50 請按任意鍵繼續(xù). . . 請輸入計算表達式:10/3 #除法只能精確到整數(shù) 計算結(jié)果:10/3=3 請按任意鍵繼續(xù). . . 請輸入計算表達式:-100 62 #負(fù)數(shù) 計算結(jié)果:-100 62=-38 請按任意鍵繼續(xù). . . 請輸入計算表達式:100%3 #求余數(shù) 計算結(jié)果:100%3=1 請按任意鍵繼續(xù). . . 注意:以上的求余數(shù)運算符%在批處理程序中必須寫成%% 請輸入計算表達式:(25 75)*2/(15 5) #括號 計算結(jié)果:(25 75)*2/(15 5)=10 請按任意鍵繼續(xù). . . 請輸入計算表達式:1234567890*9876543210 #范圍 無效數(shù)字。數(shù)字精確度限為32位。 計算結(jié)果:1234567890*9876543210= 請按任意鍵繼續(xù). . . 注意:上面的計算過程顯示,DOS 計算只能精確到32 位,這個 32 位是指二進制32 位,其中最高位為符號位(0為 正,1 為負(fù)),低位31 位為數(shù)值。31 個 1 換成十進制為2147483647,所以DOS 計算的有效值范圍是-2147483648 至2147483647,超出該數(shù)值范圍時計算出錯.請看下面的計算過程: 請輸入計算表達式:2147483647-1 #最大值減 1,值有效 計算結(jié)果:2147483647-1=2147483646 請按任意鍵繼續(xù). . . 請輸入計算表達式:2147483647 1 #最大值加 1,出錯,結(jié)果為最小值 計算結(jié)果:2147483647 1=-2147483648 請按任意鍵繼續(xù). . . 請輸入計算表達式:-2147483648-1 #最小值減 1,出錯,結(jié)果為最大值 計算結(jié)果:-2147483648-1=2147483647 請按任意鍵繼續(xù). . . 我們來看一看下面的這個例子 例13, @echo off set /a a=1 1,b=2 1,c=3 1 echo計算結(jié)果:%a% %b% %c% pause 執(zhí)行顯示:計算結(jié)果:2 3 4 發(fā)現(xiàn)其他數(shù)學(xué)運算也有效果!,這就是表達式分隔符”逗”號的作用! 有時候我們需要直接在原變量進行加減操作就可以用這種語法, set /a var =1對應(yīng)原始語法就是set /a var = %var% 1 set /a var*=2對應(yīng)原始語法就是set /a var = %var%*2 另外還有一些用邏輯或取余操作符,這些符號,按照上面的使用方法會報錯。比如我們在CMD 里輸入set /a var=1 & 1 “與運算”,它并不會顯示為 1,而是報錯,! 為什么?對于這樣的”邏輯或取余操作符”,我們需要把他們用雙引號引起來,也可以用轉(zhuǎn)義字符^,看例子set /a var= 1 “&” 1這樣結(jié)果就顯示出來了。 其他邏輯或取余操作符用法: 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,結(jié)果為1 注意:凡是按位計算均需換算成二進制,然后再計算。 思考題:求2 的n 次方 參考答案: 例14, @echo off set /p n=請輸入2 的幾次方: set /a num=1^<^ echo %num% pause 想一下這個到底是怎么運算的?呵呵,這就留給大家思考了! —————————————————————————————————–
Janunapr 編輯于2009-09-14 星期一11:45:57.46 轉(zhuǎn)載請注明:免費實用綠色軟件 >> 批處理命令學(xué)習(xí)之:set命令詳解
|