Tại sao bỏ tải các biến trong tệp bó Windows


13

Được coi là cần thiết hoặc thực hành tốt để dỡ tải các biến được sử dụng trong các tệp bó của Windows?
Ví dụ trong đoạn mã sau, set myFolder=cuối cùng có cần thiết không?

@echo off
set myFolder="C:\Temp\Batchfiles"
echo %myFolder%

set myFolder=

Tôi đã thấy điều này ở một số nơi trực tuyến, chắc chắn các biến được tải tự động khi tệp bó kết thúc?

Câu trả lời:


32

SETsẽ thiết lập một biến môi trường toàn cầu. Nó sẽ tồn tại sau khi thực hiện kịch bản của bạn.

Chúng ta hãy xem một ví dụ.
Đầu tiên, tôi xóa biến để đảm bảo nó không tồn tại.

C:\Users\Oliver\Desktop>set TEST=

Một bài kiểm tra nhanh:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%

Hãy tạo tập tin bó đó và thực hiện nó:

C:\Users\Oliver\Desktop>echo set TEST=something>test.bat
C:\Users\Oliver\Desktop>test.bat
C:\Users\Oliver\Desktop>set TEST=something

Hãy xem giá trị của TEST sau khi thực hiện .battệp của tôi :

C:\Users\Oliver\Desktop>echo %TEST%
something

Vì vậy, có, xóa biến ở cuối tập lệnh là thực hành tốt.


Thậm chí tốt hơn là sử dụng SETLOCALENDLOCALtránh toàn bộ vấn đề.

Ở đây, tôi đã tạo một .battệp mới sử dụng SETLOCALENDLOCAL:

C:\Users\Oliver\Desktop>type test.bat
setlocal
set TEST=something
endlocal

Hãy xóa TESTvà lặp lại để đảm bảo chúng ta bắt đầu sạch sẽ:

C:\Users\Oliver\Desktop>set TEST=
C:\Users\Oliver\Desktop>echo %TEST%
%TEST%

Tuyệt vời, bây giờ hãy chạy cái mới .bat:

C:\Users\Oliver\Desktop>test.bat
C:\Users\Oliver\Desktop>setlocal
C:\Users\Oliver\Desktop>set TEST=something    
C:\Users\Oliver\Desktop>endlocal

Bây giờ TESTvẫn sẽ trống:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%

2
+! để làm rõ
Raystafarian

1
Ví dụ và giải thích tuyệt vời - cảm ơn
ChrisB
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.