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 /? 可以看到這些變數的說明)


留言

  1. there should be no food intake in the body. Once you finally drink the Rescue Detox, the instructions say that you have to refill the bottle with water twice and drink it. All of this is to be done within an hour. Does it work? Not as well as Detoxify’s Herbal Cleanse. The amount of water you have to drink is also a bit too much. The goal here is to remove all the old layers of oil from your hair and scalp

    回覆刪除

發佈留言

此網誌的熱門文章

WPA_supplicant的設定方式

Nginx server 和 location 優先順序