批處理變量
批處理文件中有兩種類型的變量。 其中一個參數是在調用批處理文件時可以傳遞的參數,另一個是通過set
命令完成的。
命令行參數
批處理腳本支持命令行參數的概念,其中參數可以在被調用時傳遞給批處理文件。參數可以通過變量%1
,%2
,%3
等從批處理文件中調用。
以下示例顯示了一個批處理文件,它接受3個命令行參數,並將它們回顯到命令行屏幕。
@echo off
echo %1
echo %2
echo %3
如果上面的批處理腳本存儲在一個名爲test.bat
的文件中,我們將運行該批處理 -
Test.bat 1 2 3
以下是批處理文件執行時在命令提示符下的外觀截圖。
以上命令產生以下輸出。
1
2
3
如果要運行批處理 -
Example 1 2 3 4
輸出仍然與上面一樣。 但是,第四個參數將被忽略。
set命令
變量可以被初始化的另一種方式是通過「set」
命令。 以下是set
命令的語法。
語法
set /A variable-name=value
其中 -
- variable-name - 是想要設置的變量的名稱。
- value - 是需要根據變量設置的值。
- /A - 如果該值本質上是數值,則使用此開關。
以下示例顯示了可以使用set
命令的簡單方法。
示例
@echo off
set message=Hello World
echo %message%
- 在上面的代碼片段中,定義了一個名爲
「message」
的變量,其值爲「Hello World」
。 - 要顯示變量的值,請注意變量需要包含在
%
符號中。
以上命令產生以下輸出 -
Hello World
使用數字值
在批處理腳本中,也可以定義一個變量來保存一個數值。 這可以通過使用/A
開關完成。
以下代碼顯示了可以使用/A
開關設置數值的一種簡單方法。
@echo off
SET /A a=5
SET /A b=10
SET /A c=%a% + %b%
echo %c%
- 首先將
2
個變量a
和b
的值分別設置爲5
和10
。 - 相加這些值並存儲在變量
c
中。 - 最後,顯示變量
c
的值。
上述程序的輸出結果爲15
。
所有的算術運算符都在批處理文件中工作。 以下示例顯示算術運算符可以在批處理文件中使用。
@echo off
SET /A a=5
SET /A b=10
SET /A c=%a% + %b%
echo %c%
SET /A c=%a% - %b%
echo %c%
SET /A c=%b% / %a%
echo %c%
SET /A c=%b% * %a%
echo %c%
以上命令產生以下輸出。
15
-5
2
50
局部與全局變量
在任何編程語言中,都有一個選項可以將變量標記爲具有某種範圍,即可以訪問它們的代碼部分。 通常情況下,具有全局作用域的變量可以從程序中的任何地方訪問,而局部作用域變量則有一個可以訪問的定義的邊界。
DOS腳本還定義了局部和全局範圍的變量。 默認情況下,變量是整個命令提示符會話的全局變量。 調用SETLOCAL
命令,使變量局部在腳本的範圍內。 在調用SETLOCAL
之後,任何變量賦值在調用ENDLOCAL
,調用EXIT
,或者當執行到達腳本中的文件結尾(EOF)時都會返回。 以下示例顯示了在腳本中設置局部和全局變量時的差異。
示例
@echo off
set globalvar=5
SETLOCAL
set var=13145
set /A var=%var% + 5
echo %var%
echo %globalvar%
ENDLOCAL
上述程序幾乎沒有重要的事情要注意。
-
'globalvar'
是用全局範圍定義的,在整個腳本中都是可用的。 -
var
變量是在局部範圍內定義的,因爲它被包含在SETLOCAL
和ENDLOCAL
塊之間。 因此,這個變量在執行'ENDLOCAL'
語句後就會被銷燬。
以上命令產生以下輸出。
13150
5
注意:命令echo %var%
不會產生任何東西,因爲在ENDLOCAL
語句之後,'var'
變量將不再存在。
使用環境變量
如果有跨批處理文件使用的變量,那麼最好使用環境變量。 當定義了環境變量,就可以通過%
符號來訪問它。 以下示例顯示如何查看系統上定義的JAVA_HOME
。 JAVA_HOME
變量是各種應用程序通常使用的關鍵組件。
@echo off
echo %JAVA_HOME%
輸出將顯示從系統到系統的JAVA_HOME
目錄。 以下是一個輸出的例子。
C:\Users\Administrator>echo %JAVA_HOME%
D:\Program Files\Java\jdk1.8.0_65