ทำไมยกเลิกการโหลดตัวแปรในไฟล์แบตช์ Windows


13

มีการพิจารณาถึงความจำเป็นหรือวิธีปฏิบัติที่ดีในการยกเลิกการโหลดตัวแปรที่ใช้ในไฟล์แบตช์ของ Windows หรือไม่
ตัวอย่างเช่นในรหัสต่อไปนี้set myFolder=ในตอนท้ายจำเป็นหรือไม่

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

set myFolder=

ฉันเคยเห็นสิ่งนี้ในหลาย ๆ ที่ทางออนไลน์แน่นอนว่าตัวแปรจะถูกยกเลิกการโหลดโดยอัตโนมัติเมื่อไฟล์แบตช์สิ้นสุดหรือไม่

คำตอบ:


33

SETจะตั้งค่าตัวแปรสภาพแวดล้อมทั่วโลก มันจะยังคงมีอยู่หลังจากการดำเนินการของสคริปต์ของคุณ

ลองมาดูตัวอย่าง
ก่อนอื่นฉันลบตัวแปรเพื่อให้แน่ใจว่าไม่มีอยู่

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

การทดสอบอย่างรวดเร็ว:

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

มาสร้างแบทช์ไฟล์นั้นขึ้นมาและรันมัน:

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

เรามาดูค่าของการทดสอบหลังจากการทำงานของ.batไฟล์ของฉัน:

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

ดังนั้นการล้างตัวแปรในตอนท้ายของสคริปต์จึงเป็นแนวปฏิบัติที่ดี


ยิ่งไปกว่านั้นคือการใช้SETLOCALและENDLOCALหลีกเลี่ยงปัญหาทั้งหมด

ที่นี่ฉันสร้าง.batไฟล์ใหม่ที่ใช้SETLOCALและENDLOCAL:

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

ให้ชัดเจนTESTและสะท้อนเพื่อให้แน่ใจว่าเราเริ่มทำความสะอาด:

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

เยี่ยมมากตอนนี้มารันใหม่.batกันดีกว่า:

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

ตอนนี้TESTจะยังว่างอยู่:

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

2
+! สำหรับการชี้แจง
Raystafarian

1
ตัวอย่างที่ดีและคำอธิบาย - ขอบคุณ
ChrisB
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.