|
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 /? 可以看到這些變數的說明)
文章來源: http://bigpxuan.blogspot.com/2016/08/dos-set.html
|
|