ฉันกำลังพยายามกำหนดและใช้ตัวแปรในไฟล์แบตช์ ดูเหมือนว่าควรจะง่าย:
@echo off
set location = "bob"
echo We're working with "%location%"
ผลลัพธ์ที่ฉันได้รับมีดังนี้:
We're working with ""
เกิดอะไรขึ้นที่นี่? ทำไมตัวแปรของฉันถึงไม่เป็นเสียงก้อง
ฉันกำลังพยายามกำหนดและใช้ตัวแปรในไฟล์แบตช์ ดูเหมือนว่าควรจะง่าย:
@echo off
set location = "bob"
echo We're working with "%location%"
ผลลัพธ์ที่ฉันได้รับมีดังนี้:
We're working with ""
เกิดอะไรขึ้นที่นี่? ทำไมตัวแปรของฉันถึงไม่เป็นเสียงก้อง
คำตอบ:
ช่องว่างก่อนที่=
จะถูกตีความเป็นส่วนหนึ่งของชื่อและช่องว่างหลังจากนั้น (รวมทั้งเครื่องหมายคำพูด) จะถูกตีความเป็นส่วนหนึ่งของค่า ดังนั้นตัวแปรที่คุณสร้างขึ้นสามารถอ้างอิง%location %
ได้ หากไม่ใช่สิ่งที่คุณต้องการให้ลบช่องว่างเพิ่มเติมในคำจำกัดความ
alias x = y
* ในที่ดินระวัง?
x = y
?
ช่องว่างมีความสำคัญ คุณสร้างชื่อตัวแปรที่มีค่าของ'location '
หมายเหตุ - เพิ่มเครื่องหมายคำพูดเดี่ยวล้อมรอบเพื่อเพิ่มตำแหน่งของพื้นที่
' "bob"'
หากคุณต้องการคำพูดในค่าของคุณแล้วรหัสของคุณควรมีลักษณะ
set location="bob"
หากคุณไม่ต้องการคำพูดรหัสของคุณควรมีลักษณะดังนี้
set location=bob
หรือดีกว่าเลย
set "location=bob"
ไวยากรณ์สุดท้ายป้องกันช่องว่างต่อท้ายโดยไม่ตั้งใจจากการรับค่าและยังป้องกันอักขระพิเศษเช่น&
|
ฯลฯ
%
และอาจเป็นไปได้!
หากเปิดใช้งานการขยายล่าช้า แต่ถ้าค่าที่จะมีคำพูดแล้วคุณจะต้องกังวลเกี่ยวกับเมื่อตัวหนีพิษเช่น|
, &
ฯลฯ
อินพุต location.bat
@echo off
cls
set /p "location"="bob"
echo We're working with %location%
pause
เอาท์พุต
We're working with bob
(คุณทำผิดพลาด: space
และ" "
)
set /p
แจ้งให้ผู้ใช้และเก็บคำตอบในตัวแปรที่ระบุ เช่นset /p name="What is your name? " & echo Hello, %name%.
set /p "varname"="text"
ผิด, มันจะสร้างตัวแปรที่ชื่อว่าlocation"
(พร้อมด้วยเครื่องหมายคำพูดต่อท้าย!) set /p location="bob"
มันควรจะเป็น แต่ถึงกระนั้นมันก็ไม่ตรงกับคำถามอีกต่อไปแล้ว
=
ถูกตีความว่าเป็นส่วนหนึ่งของชื่อแล้วตัวแปรไม่สามารถนำมาอ้างอิงเป็นก็จะต้องมีการอ้างอิงเป็น%location%
%location %
นั่นคือการพิมพ์ผิดหรือเปล่า?