一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

批處理命令學(xué)習(xí)之:set命令詳解

 角亢氐房心尾箕 2017-02-21
批處理命令學(xué)習(xí)之:set命令詳解 
綠化資料 免費實用綠軟 2年前 (2014-10-04) 1084瀏覽 0評論

學(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命令詳解

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本少妇aa特黄大片| 日韩av亚洲一区二区三区| 欧美午夜一级艳片免费看| 婷婷一区二区三区四区| 国产精品午夜福利在线观看| 国产日产欧美精品视频| 一区二区三区日韩中文| 国产一级内片内射免费看| 在线观看国产成人av天堂野外| 一区二区三区人妻在线| 午夜国产精品福利在线观看| 日韩在线视频精品中文字幕| 国产性情片一区二区三区| 高清欧美大片免费在线观看| 极品少妇一区二区三区精品视频 | 激情丁香激情五月婷婷| 亚洲一区二区福利在线| 不卡免费成人日韩精品| 99在线视频精品免费播放| 不卡在线播放一区二区三区| 大香蕉久草网一区二区三区| 中文字幕日韩一区二区不卡| 久久99这里只精品热在线| 男女午夜福利院在线观看| 日韩一级一片内射视频4k| 激情三级在线观看视频| 国产精品人妻熟女毛片av久| 亚洲国产精品国自产拍社区| 国产精品欧美激情在线观看| 九九热这里只有免费精品| 亚洲国产成人久久99精品| 国产成人精品国内自产拍| 亚洲高清欧美中文字幕| 91人妻人人精品人人爽| 色丁香之五月婷婷开心| 91久久精品中文内射| 欧美日韩一区二区综合| 成人精品国产亚洲av久久| 日韩国产欧美中文字幕| 黑人巨大精品欧美一区二区区| 日韩人妻中文字幕精品|