ดูเหมือนว่าตัวแปรจะถูกตั้งค่าด้วยการรันครั้งสุดท้าย
นี่เป็นเพราะวิธีcmd
แยกวิเคราะห์ไฟล์แบตช์ โดยค่าเริ่มต้นตัวแปรจะถูกขยายเวลาการแยกวิเคราะห์ไม่ใช่เวลารัน ซึ่งหมายความว่าตัวแปรในลูปจะได้รับการประเมินอย่างไม่ถูกต้องยกเว้นว่าคุณเปิดใช้งานการขยายที่ล่าช้า :
setlocal enabledelayedexpansion
การขยายที่ล่าช้าจะทำให้ตัวแปรขยายตัวในเวลาดำเนินการแทนที่จะใช้เวลาในการแยกวิเคราะห์ตัวเลือกนี้จะเปิดใช้งานพร้อมกับSETLOCAL
คำสั่ง
เมื่อการขยายที่ล่าช้าอยู่ในตัวแปรผลสามารถอ้างอิงได้โดยใช้!variable_name!
(นอกเหนือจากปกติ%variable_name%
)
การขยายตัวล่าช้าที่มา
ใช้ไฟล์แบตช์ต่อไปนี้
test.cmd:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (data.bat) do (
echo %%a
set server=%%a
echo !server!
)
pause
endlocal
ตัวอย่างผลลัพธ์:
F:\test>test
1
1
2
2
3
3
4
4
Press any key to continue . . .
อ่านเพิ่มเติม
- ดัชนี AZ ของบรรทัดคำสั่ง Windows CMD - การอ้างอิงที่ยอดเยี่ยมสำหรับทุกสิ่งที่เกี่ยวข้องกับบรรทัด Windows cmd
- เปิดใช้งานการขยายเวลาล่าช้า - การขยายที่ล่าช้าจะทำให้ตัวแปรขยายตัวในเวลาดำเนินการแทนการแจงเวลา
- setlocal - ตั้งค่าตัวเลือกเพื่อควบคุมการมองเห็นตัวแปรสภาพแวดล้อมในไฟล์แบตช์