openplanning

Biến (Variable) trong ngôn ngữ kịch bản Batch

  1. Biến là gì?
  2. Các biến thông thường
  3. Các biến thông số (Argument variables)
  4. Phạm vi của biến
  5. Các biến môi trường của Windows

1. Biến là gì?

Biến là một khái niệm cơ bản trong khoa học máy tính, nó là một giá trị có thể thay đổi. Cũng giống các ngôn ngữ khác, Batch cũng có khái niệm về biến.
Về cơ bản Batch có 2 loại biến:
  • Các biến khai báo trong tập tin thông qua lệnh set.
  • Các biến thông số (Argument variable), được truyền (pass) từ bên ngoài khi tập tin được gọi để thực thi.

2. Các biến thông thường

Ngôn ngữ Batch không có khái niệm một cách rõ ràng về kiểu dữ liệu, thông thường một biến có giá trị là một chuỗi (string), bao gồm các ký tự sau dấu = cho tới cuối dòng (Bao gồm cả khoảng trắng nếu có).
Trong trường hợp bạn muốn khai báo một biến là một số, bạn cần sử dụng lệnh set /A
Để truy cập vào giá trị của một biến, bạn phải đóng (enclosed) biến đó trong cặp dấu %.
Ví dụ:
variableExample1.bat
@echo off 
set name=Tran
set /A age=  37
echo %name%
echo %age%

set info=My Name is: %name%, Age: %age%
echo %info%
pause
variableExample2.bat
@echo off
set /A a =  100
set /A b =  200

echo a = %a%
echo b = %b%

set /A sum = a + b
echo Sum = %sum%
pause

3. Các biến thông số (Argument variables)

Khi gọi để thực thi một tập tin batch, bạn có thể truyền (pass) các giá trị vào cho tập tin. Bên trong tập tin bạn có thể truy cập vào các giá trị này thông qua các biến %1, %2, %3,... Các biến này còn được gọi là các biến thông số (Argument variables).
argumentVariables.bat
@echo off
@echo First argument is: %1
@echo Second argument is: %2
pause
Chúng ta test ví dụ trên bằng cách mở cửa sổ CMD, và CD tới thư mục chứa tập tin argumentVariables.bat
Thực thi tập tin argumentVariables.bat với các thông số.
Kết quả:

4. Phạm vi của biến

Khi một cửa sổ lệnh (Command Window) được mở ra, nó sẽ bắt đầu một phiên làm việc (session). Phiên làm việc đó sẽ kết thúc khi của sổ lệnh bị đóng lại. Trong một phiên làm việc bạn có thể thực thi một hoặc nhiều tập tin batch. Các biến được tạo ra trong tập tin trước có thể được truy cập trong tập tin sau. Các biến như vậy được gọi là các biến toàn cục (Global Variable). Tuy nhiên bạn có thể tạo một biến địa phương (Local Variable), biến địa phương chỉ tồn tại trong nội bộ tập tin định nghĩa ra nó, hoặc chỉ tồn tại trong một đoạn code của tập tin đó.
Ví dụ biến địa phương (Local Variables)
Các biến địa phương (Local variable) được khai báo trong một khối, bắt đầu bởi từ khóa setlocal và kết thúc bởi từ khóa endlocal.
localVariable.bat
@echo off
set global1=I am a global variable 1

setlocal
  set local1=I am a local variable 1
  set local2=I am a local variable 2
  echo ----- In Local Block! -----
  echo local1= %local1%
  echo local2= %local2%
endlocal

echo  ..
echo ----- Out of Local Block! -----
echo global1= %global1%
echo local1= %local1%
echo local2= %local2%
pause
Ví dụ biến toàn cục (Global Variables):
Các biến được khai báo trong tập tin Batch, và không nằm trong khối lệnh setlocal .. endlocal, sẽ là các biến toàn cục. Chúng có thể được sử dụng trong các tập tin khác trong cùng một phiên làm việc (Session).
Trong ví dụ này chúng ta có 2 tập tin batchFile1.batbatchFile2.bat. Biến MY_ENVIRONMENT được định nghĩa trong tập tin 1, và nó được sử dụng trong tập tin 2.
batchFile1.bat
@echo off
set MY_ENVIRONMENT=C:/Programs/Abc;C:/Test/Abc
batchFile2.bat
@echo off
echo In batchFile2.bat 
echo MY_ENVIRONMENT=%MY_ENVIRONMENT%
Mở cửa sổ CMD, và CD tới thư mục chứa tập tin batchFile1.bat, batchFile2.bat, chạy lần lượt từng tập tin này.

5. Các biến môi trường của Windows

Windows cho phép bạn tạo ra các biến môi trường, các biến này sẽ là các biến toàn cục có thể sử dụng trong các tập tin batch bất kỳ.
Trên Windows chọn:
  • Start Menu/Control Panel/System
  • Advanced (Tab) > Environment Variables..
Ở đây, bạn có thể tạo một biến môi trường cho user hiện tại, hoặc biến môi trường hệ thống (system environment variable) có thể sử dụng cho mọi user.
Chẳng hạn, tôi tạo một biến môi trường có tên MY_ENVIRONMENT_VARIABLE và giá trị là "My Environment Variable Value!".
Và có thể sử dụng biến môi trường vừa được tạo ra trong tập tin batch.
testEnvVariable.bat
@echo off
echo %MY_ENVIRONMENT_VARIABLE%
pause