- 帖子
- 83
- 主題
- 73
- 精華
- 0
- 積分
- 164
- 點名
- 0
- 作業系統
- xp
- 軟體版本
- Office 2003
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2013-8-12
- 最後登錄
- 2015-12-13
|
2#
發表於 2013-8-15 22:58
| 只看該作者
BAT批次指令: SET 的功能範例詳解- 一
本帖最後由 a448488 於 2013-8-15 23:00 編輯
BAT批次指令: SET 的功能範例詳解- 一
-----------------------------------------------------------------------------------------------
‧指令:Set
‧說明:宣告變數;設定變數。
‧備註:在DOS環境下輸入Set,可列出windows環境變數。
‧用法:SET gbs=%OS% 找取得作業系統
SET xdate=%date% 找取得目前日期20130808
SET xmonth=%date:~5,2% 找取得目前月份08
SET select=
SET /P select=請選擇: 等待找取得使用者所輸入字元
‧參數:[variable=[string]]
/P variable=[promptString]
/A expression
環境變數取代已下列增強:
%PATH:str1=str2%
%PATH:~10,5%
%PATH:~-10%
%PATH:~0,-2%
-----------------------------------------------------------------------------------------------
SET [variable=[string]]
範例:
--------------------------
@echo off
set var=我是值
echo %var%
pause
--------------------------
請看 set var=我是值 ,這就是BAT直接在批次處理作業中設定變數的方法!
set 是指令 var 是變數名 = 號右邊的"我是值"是變數的值
在批次處理作業中要參考這個變就把 var 變數名用兩個%(百分號)括起來,如%var%
這種SET語法只能直接在BAT原始碼前賦予變數的值,有時候需要提供一個交互介面,
讓使用者自己輸入變數的值,然後我們在來根據這個值來做相對操作,
--------------------------
SET /P variable=[promptString]
這種SET的語法,只需要加一個"/P"參數就可以了!
範例:
--------------------------
@echo off
set /p var=請輸入變數的值:
if %var% == 1 echo 您輸入了 1 ~_~
pause
--------------------------
set /p 是指令語法 var 是變數名 = 號右邊的"請輸入變數的值: ",這個是提示語,不是變量的值!
執行後,在提示語後面直接輸入1,就會顯示一列輸入的 1 ~_~ ,輸入別的就沒有任何反映!
--------------------------
SET /A expression
/A 指令列開關指定等號右邊的文字串為被評估的數位運算式。
該運算式評估器很簡單並以遞減的優先(順序)支援下列操作:
() - 壓縮形式
! ~ - - 單元運算子
* / % - 算數運算子
+ - - 算數運算子
<< >> - 邏輯位移
& - 按位「與」
^ - 按位「互斥或」
| - 按位「或」
= *= /= %= += -= - 賦值
&= ^= |= <<= >>=
, - 運算式分隔符號
上面這些是系統說明裡的內容,簡單翻譯一下:
set的/A參數就是讓SET可以支援群論符號進列加減等一些群論自變數!
現在舉例子介紹這些群論符號的用法:
看範例:
這裡的例子請直接在CMD下複製指令執行,不需要儲存為BAT!
set /a var=1 + 1
set /a 文法, var變數名 1 + 1 群論式子
複製執行後會直接顯示一個2,或者執行完後我們輸入echo %var%,也是二,
這就是一個簡單的加法自變數!
set /a var=2 - 1 結果是多少呢?如果你看不至結果就echo %var%.....
set /a var=2 * 2 乘法自變數
set /a var=2 / 2 除法自變數
set /a var=(1+1) + (1+1) 結果等於4 看得懂吧!
set /a a=1+1,b=2+1,c=3+1
執行後會顯示一個4,但用echo %a% %b% %c%後看結果,會發現其他群論自變數也有效果!這就是"斗"號的作用!
有時候需要直接在原變數進列加減操作就可以用這種語法
set /a var+=1 這樣的語法對應原始語法就是set /a var = %var% + 1
都是一樣的結果,在原變數的值上在進列群論自變數,不過這樣寫簡單一點
再寫一個:
set /a 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= 2 "<<" 2 次方自變數
set /a var= 4 ">>" 2 ....
這些符號也可以用&= ^= |= <<= >>= 這樣的簡單用法如
set /a var"&=" 1 等於set /a var = %var% "&" 1 注意引號
現在說%PATH:str1=str2%
這個是取代變數值的內容
範例:
--------------------------
@echo off
set a= bbs.verybat.cn
echo 取代前的值: "%a%"
set var=%a: =%
echo 取代後的值: "%var%"
pause
--------------------------
對比一下,發現它把變數%a%的空白字元給取代掉了,從這個範例,我們就可以發現
%PATH:str1=str2%這個操作就是把變數%PATH%的裡的str1全部用str2取代
比如把上面的例子改成這樣
--------------------------
@echo off
set a=bbs.verybat.cn
echo 取代前的值: "%a%"
set var=%a:.=傷腦筋%
echo 取代後的值: "%var%"
pause
--------------------------
翻譯set var=%a:.=傷腦筋%
set指令 var變數名 字a是要進列字元取代的變數的值,"."為要取代的值,"傷腦筋"為取代後的值!
執列後就會把變數%a%裡面的"."全部取代為"傷腦筋"這就是set的隨換字元的很好的功能!
%PATH:~10,5% 這是什麼意思?
範例:
--------------------------
@echo off
set a=bbs.verybat.cn
set var=%a:~1,2%
echo %var%
pause
--------------------------
執列後,會發現只顯示了"bs"兩個字母,變數%a%的值不是為bbs.verybat.cn嗎?
怎麼只顯示了第2個字母和第3個字母"bs",分析一結果就可以很容易看出
%PATH:~10,5%就是顯示變數PATH裡指定幾位的值!
分析set var=%a:~1,2%
set指令 var變數值 a 要進列字元操作的變數 "1" 從變數 "a" 第幾位開始顯示 "2" 顯示幾位和起來就是把變數 a 的值,從第一位開始,把後兩位賦予給變數var
就樣因該明白了吧~
--------------------------
其他兩種語法:
%PATH:~-10%
%PATH:~0,-2%
也是顯示指定變數指定幾位的值得的意思
%PATH:~-10%
範例:
--------------------------
@echo off
set a=bbs.verybat.cn
set var=%a:~-3%
echo %var%
pause
--------------------------
這個就是把變數a倒數3位的值給變數VAR
當然我們也可以改成這樣
--------------------------
@echo off
set a=bbs.verybat.cn
set var=%a:~3%
echo %var%
pause
--------------------------
這個就是把變數a的從第3位開始後面全部的值給變數VAR
%PATH:~0,-2%
範例:
--------------------------
@echo off
set a=bbs.verybat.cn
set var=%a:~0,-3%
echo %var%
pause
--------------------------
執列後,發現顯示的是"bbs.verybat",少了".cn" ;從結果分析,很容易分析出,這是把變數a的值從0位開始,至倒數第三位之間的值全部賦予給var
如果改成這樣
--------------------------
@echo off
set a=bbs.verybat.cn
set var=%a:~2,-3%
echo %var%
pause
-------------------------- |
|