批次處理變數


批次處理檔案中有兩種型別的變數。 其中一個引數是在呼叫批次處理檔案時可以傳遞的引數,另一個是通過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個變數ab的值分別設定為510
  • 相加這些值並儲存在變數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變數是在區域性範圍內定義的,因為它被包含在SETLOCALENDLOCAL塊之間。 因此,這個變數在執行'ENDLOCAL'語句後就會被銷毀。

以上命令產生以下輸出。

13150
5

注意:命令echo %var%不會產生任何東西,因為在ENDLOCAL語句之後,'var'變數將不再存在。

使用環境變數

如果有跨批次處理檔案使用的變數,那麼最好使用環境變數。 當定義了環境變數,就可以通過%符號來存取它。 以下範例顯示如何檢視系統上定義的JAVA_HOMEJAVA_HOME變數是各種應用程式通常使用的關鍵元件。

@echo off 
echo %JAVA_HOME%

輸出將顯示從系統到系統的JAVA_HOME目錄。 以下是一個輸出的例子。

C:\Users\Administrator>echo %JAVA_HOME%
D:\Program Files\Java\jdk1.8.0_65