Mengapa membongkar variabel dalam file batch Windows

13

Apakah dianggap perlu atau praktik yang baik untuk membongkar variabel yang digunakan dalam file batch Windows?
Misalnya dalam kode berikut, apakah set myFolder=pada akhirnya diperlukan?

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

set myFolder=

Saya telah melihat ini di sejumlah tempat online, tentu variabel diturunkan secara otomatis ketika file batch berakhir?

ChrisB
sumber

Jawaban:

32

SETakan menetapkan variabel lingkungan global. Ini akan bertahan setelah eksekusi skrip Anda.

Mari kita lihat sebuah contoh.
Pertama, saya menghapus variabel untuk memastikan tidak ada.

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

Tes cepat:

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

Mari kita buat file batch itu dan jalankan:

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

Mari kita lihat nilai TEST setelah eksekusi .batfile saya :

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

Jadi, ya, menghapus variabel di akhir skrip adalah praktik yang baik.


Bahkan lebih baik menggunakan SETLOCALdan ENDLOCALmenghindari seluruh masalah.

Di sini, saya membuat .batfile baru yang menggunakan SETLOCALdan ENDLOCAL:

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

Mari bersihkan TESTdan gema untuk memastikan kita mulai bersih:

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

Luar biasa, sekarang mari kita jalankan yang baru .bat:

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

Sekarang TESTmasih kosong:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%
Der Hochstapler
sumber
2
+! untuk klarifikasi
Raystafarian
1
Contoh dan penjelasan yang bagus - terima kasih
ChrisB