DOS指令 -- SET和變數

DOS指令 -- SET變數

Dos的SET功能很強大也很困擾,這邊說一下筆者會用到的SET功能和變數


在Dos中,set用來建立變數和指定變數的值
在批次檔中使用set指令的時候,建議使用 setlocal/endlocal
如 :
setlocal
set a=1
set b=2
endlocal

如果有用到IF或FOR,可以使用參數enableextensions enabledelayedexpansion
如 :
setlocal enableextensions enabledelayedexpansion
for /L %%a in (1,1,3) do (
set a=!a!+%%a
)
echo %a%
endlocal
實際的使用方式可以參考 --這裡--



SET的基本功能

指定變數
set aaa=World!!
set bbb=100

set後面加上的文字是變數, "=" 後面的任何文字就是這個變數的值
如果輸入的是數字,SET會自動判斷。如果數字的第一個字是 0 會被判定為8進位,如 : 07
注意 : =符號的前後不要空白,會被判定為文字



變數四則運算
set /a aaa=5+6
 aaa=11

set /a x=5%%2        //在set /?裡面是寫一個%,如果是在批次檔內要用兩個%
x=1

set /a bbb=2*(5+2)
bbb=14

set ccc=4
set /a ccc*=5       //這個等於 ccc=%ccc%*5
ccc=20

set x=5
set y=2
set /a x-=%y%-1
x=4

在set後面加上 /a ,就可以進行運算相對應的符號有 + 加號,- 減號, / 除號, * 乘號
%% 為除完後的餘數
( )內的運算會優先執行,就跟真實環境的四則運算一樣
如果要自己對自己運算(如第三個例子),可以把運算符號放在 = 的前面
第四個例子比較特別,會先把=號右邊算完,才會進行 -=的運算



讓使用者自行填入變數

set /p x=請填入生日:
echo %x%

輸出:
請填入生日: 1234  <--1234是筆者填入的數字
1234



SET擴充的功能

取代

%變數:find=replace%

set x=Haco
set x=%x:ac=ell%
x=Hello


整個變數要用 %% (或! !) 包起來
 : ---------  : 號是分隔線,在這之後就是取代的搜索和取代文字
find ------ 變數內要備取代的文字
replace -- 當被find找到的文字會被replace所設定的文字取代



取得子字串
可以把變數的文字切一小塊出來

%變數:~A,B%

set x=Don`t Do that
echo %x:~3,6%
輸出:
`t Do

set x=ABCDEF
echo %x:~-3%
DEF



整個變數要用 %% (或! !) 包起來
 : -----  : 號是分隔線,在這之後就是要提取的文字
~ ----- 固定符號
A ---- 從第幾個文字開始取,0是第一個,不輸入也代表是0
, ----- A和B之間要用 , 號隔開
B ---- 要連續取幾個文字,可以是負的,代表倒著取文字



在For或If內使用set /a,最好是把運算的部分用 "" 包起來
因為set後面的 ) 符號會影響IF的 ( 符號

If x = x (
set /a "x=3*(2+2)"
)




實用的內建變數

批次檔
大部分使用Dos指令都是使用批次檔,當執行批次檔時會有內建的變數

%~X  --  X是0到9,0代表這個批次檔,1到9是後面加的參數

echo %~0   //可能會是 c:\test_dir\test.bat,端看批次檔的位置
test.bat aaa.txt

echo 批次檔 : %~0,第一個參數 : %~1
輸出 : 批次檔 : c:\test_dir\test.bat,第一個參數 : c:\test_dir\aaa.txt

其中這個%~X功能前面可以增加參數
%~X         - 顯示參數 X 檔案的完整路徑+檔名+副檔名
%~fX        - 功能同上
%~dX        - 顯示參數 X 檔案的磁碟機代號
%~pX        - 顯示參數 X 檔案的路徑
%~nX        - 顯示參數 X 檔案的檔名
%~xX        - 顯示參數 X 檔案的副檔名
%~sX        - 功能類似%~fX,但檔名是短檔名
%~aX        - 顯示參數 X 檔案的檔案屬性
%~tX        - 顯示參數 X 檔案的日期/時間
%~zX        - 顯示參數 X 檔案的檔案大小

這些參數可以複合使用,如
%~dp0  顯示批此檔的完整路徑,但不包含檔名(常用)
%~nx0  顯示批次檔的檔名+副檔名



環境變數

%date%  顯示日期,星期的部分會依照windows設定的語言而改變
%time% 顯示時間,上下午的部分會依照windows設定的語言而改變
%CD%  顯示執行目錄,
%CMDCMDLINE%  執行這個檔案的原執行程式,一般是CMD.exe
%RANDOM%  0到32767之間的亂數

(使用set /? 可以看到這些變數的說明)


Comments

Popular posts from this blog

WPA_supplicant的設定方式

DOS指令 -- FOR迴圈