在dos中使用set定義變量:web
set a=8 (注意等號兩邊沒有空格)express
引用變量如:apache
echo %a% 將打印a的值 (%a%是獲取變量a的值)tomcat
dos中要使用算術運算,須要使用 set 命令:app
set /a val=3*4 將打印12 (注意等號兩邊沒有空格)webapp
例子this
@echo off set b=8888 rem 下一條語句定義了dos中的算術運算 set /a val = 3*2 for /l %%i in (1,1,%val%) do echo %%i echo -----------b=%b% pause
運行結果以下:spa
C:\Program Files\MySQL\MySQL Server 5.7\bin>set/? 顯示、設置或刪除 cmd.exe 環境變量。 SET [variable=[string]] variable 指定環境變量名。 string 指定要指派給變量的一系列字符串。 要顯示當前環境變量,鍵入不帶參數的 SET。 若是命令擴展被啓用,SET 會以下改變: 可僅用一個變量激活 SET 命令,等號或值不顯示全部前綴匹配 SET 命令已使用的名稱的全部變量的值。例如: SET P 會顯示全部以字母 P 打頭的變量 若是在當前環境中找不到該變量名稱,SET 命令將把 ERRORLEVEL 設置成 1。 SET 命令不容許變量名含有等號。 在 SET 命令中添加了兩個新命令行開關: SET /A expression SET /P variable=[promptString] /A 命令行開關指定等號右邊的字符串爲被評估的數字表達式。該表達式 評估器很簡單並以遞減的優先權順序支持下列操做: () - 分組 ! ~ - - 一元運算符 * / % - 算數運算符 + - - 算數運算符 << >> - 邏輯移位 & - 按位「與」 ^ - 按位「異」 | - 按位「或」 = *= /= %= += -= - 賦值 &= ^= |= <<= >>= , - 表達式分隔符 若是你使用任何邏輯或取餘操做符, 你須要將表達式字符串用 引號擴起來。在表達式中的任何非數字字符串鍵做爲環境變量 名稱,這些環境變量名稱的值已在使用前轉換成數字。若是指定 了一個環境變量名稱,但未在當前環境中定義,那麼值將被定爲 零。這使你能夠使用環境變量值作計算而不用鍵入那些 % 符號 來獲得它們的值。若是 SET /A 在命令腳本外的命令行執行的, 那麼它顯示該表達式的最後值。該分配的操做符在分配的操做符 左邊須要一個環境變量名稱。除十六進制有 0x 前綴,八進制 有 0 前綴的,數字值爲十進位數字。所以,0x12 與 18 和 022 相同。請注意八進制公式可能很容易搞混: 08 和 09 是無效的數字, 由於 8 和 9 不是有效的八進制位數。(& ) /P 命令行開關容許將變量數值設成用戶輸入的一行輸入。讀取輸入 行以前,顯示指定的 promptString。promptString 能夠是空的。 環境變量替換已以下加強: %PATH:str1=str2% 會擴展 PATH 環境變量,用 "str2" 代替擴展結果中的每一個 "str1"。 要有效地從擴展結果中刪除全部的 "str1","str2" 能夠是空的。 "str1" 能夠以星號打頭;在這種狀況下,"str1" 會從擴展結果的 開始到 str1 剩餘部分第一次出現的地方,都一直保持相配。 也能夠爲擴展名指定子字符串。 %PATH:~10,5% 會擴展 PATH 環境變量,而後只使用在擴展結果中從第 11 個(偏 移量 10)字符開始的五個字符。若是沒有指定長度,則採用默認 值,即變量數值的餘數。若是兩個數字(偏移量和長度)都是負數, 使用的數字則是環境變量數值長度加上指定的偏移量或長度。 %PATH:~-10% 會提取 PATH 變量的最後十個字符。 %PATH:~0,-2% 會提取 PATH 變量的全部字符,除了最後兩個。 終於添加了延遲環境變量擴充的支持。該支持老是按默認值被 停用,但也能夠經過 CMD.EXE 的 /V 命令行開關而被啓用/停用。 請參閱 CMD /? 考慮到讀取一行文本時所遇到的目前擴充的限制時,延遲環境 變量擴充是頗有用的,而不是執行的時候。如下例子說明直接 變量擴充的問題: set VAR=before if "%VAR%" == "before" ( set VAR=after if "%VAR%" == "after" @echo If you see this, it worked ) 不會顯示消息,由於在讀到第一個 IF 語句時,BOTH IF 語句中 的 %VAR% 會被代替;緣由是: 它包含 IF 的文體,IF 是一個 複合語句。因此,複合語句中的 IF 其實是在比較 "before" 和 "after",這二者永遠不會相等。一樣,如下這個例子也不會達到 預期效果: set LIST= for %i in (*) do set LIST=%LIST% %i echo %LIST% 緣由是,它不會在目前的目錄中創建一個文件列表,而只是將 LIST 變量設成找到的最後一個文件。這也是由於 %LIST% 在 FOR 語句被讀取時,只被擴充了一次;並且,那時的 LIST 變量 是空的。所以,咱們真正執行的 FOR 循環是: for %i in (*) do set LIST= %i 這個循環繼續將 LIST 設成找到的最後一個文件。 延遲環境變量擴充容許你使用一個不一樣的字符(驚歎號)在執行 時間擴充環境變量。若是延遲的變量擴充被啓用,能夠將上面 例子寫成如下所示,以達到預期效果: set VAR=before if "%VAR%" == "before" ( set VAR=after if "!VAR!" == "after" @echo If you see this, it worked ) set LIST= for %i in (*) do set LIST=!LIST! %i echo %LIST% 若是命令擴展被啓用,有幾個動態環境變量能夠被擴展,但不會出如今 SET 顯示的變 量列表中。每次變量數值被擴展時,這些變量數值都會被動態計算。若是用戶用這些 名稱中任何一個明肯定義變量,那個定義會替代下面描述的動態定義: %CD% - 擴展到當前目錄字符串。 %DATE% - 用跟 DATE 命令一樣的格式擴展到當前日期。 %TIME% - 用跟 TIME 命令一樣的格式擴展到當前時間。 %RANDOM% - 擴展到 0 和 32767 之間的任意十進制數字。 %ERRORLEVEL% - 擴展到當前 ERRORLEVEL 數值。 %CMDEXTVERSION% - 擴展到當前命令處理器擴展版本號。 %CMDCMDLINE% - 擴展到調用命令處理器的原始命令行。 %HIGHESTNUMANODENUMBER% - 擴展到此計算機上的最高 NUMA 節點號。
DOS中能獲取到的變量的值見上面標紅的地方。命令行
例如:一個根據時間建立目錄備份文件的bat命令:code
@ECHO OFF SET SRCPATH=D:\"Apache Software Foundation"\apache-tomcat-7.0.63\webapps\aqjc\uploads SET DESPATH=D:\test\dump\ FOR /F "TOKENS=1,2,3 DELIMS=/ " %%i IN ('DATE /T') DO SET d=%%i-%%j-%%k SET DESDIR=uploads%d% MKDIR %DESPATH%%DESDIR% XCOPY %SRCPATH% %DESPATH%%DESDIR% /S ECHO ON rem Pause
本身寫的一個根據當前時間建立目錄的bat:
@ECHO OFF cd C:\Users\liqiang\Desktop set name=%date:~0,10% set name=%name:/=-% mkdir %name% pause
結果: