สมมติว่าฉันดำเนินการต่อไปนี้ในเชลล์ CMD:
SET "FOO=bar"
มีวิธียกเลิกการกำหนดตัวแปรนี้หรือไม่นอกเหนือจากการรีไซเคิลเปลือก CMD
สมมติว่าฉันดำเนินการต่อไปนี้ในเชลล์ CMD:
SET "FOO=bar"
มีวิธียกเลิกการกำหนดตัวแปรนี้หรือไม่นอกเหนือจากการรีไซเคิลเปลือก CMD
set var=
คำตอบของคุณทำงานภายใต้ MS-DOS 6.22 command.com เหมือนกับที่ทำใน Windows cmd.exe (อย่างไรก็ตามแตกต่างจาก Windows การใส่เครื่องหมายคำพูดคู่รอบ var = ไม่ได้ผล แต่จะสร้างตัวแปรสภาพแวดล้อมที่ชื่อขึ้นต้นด้วยเครื่องหมายคำพูดคู่)
คำตอบ:
ใช่คุณสามารถยกเลิกการตั้งค่าด้วยไฟล์
set FOO=
หรือโดยชัดแจ้งโดยใช้:
set "FOO="
ตรวจสอบให้แน่ใจว่าไม่มีอักขระภายนอก (มองไม่เห็น) ต่อท้าย=
เครื่องหมาย นั่นคือ:
set FOO=
แตกต่างจากset FOO=
.วิธีที่ปลอดภัยในการยกเลิกการตั้งค่าตัวแปรคือการใช้เครื่องหมายคำพูดด้วยจะไม่มีปัญหากับการเว้นวรรคต่อท้าย
set FOO=bar
echo %FOO%
set "FOO=" text after the last quote is ignored
echo %FOO%
วิธีอื่น
@Echo oFF
setlocal
set FOO=bar
echo %FOO%
endlocal
echo %FOO%
pause
หมายเหตุ: สิ่งนี้จะใช้ไม่ได้กับพรอมต์คำสั่งแบบโต้ตอบ แต่ทำงานในสคริปต์แบทช์
สิ่งนี้ใช้ได้กับฉันในเชลล์ Windows 7 CMD ของฉัน:
set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
set
คำสั่ง หากคุณลองset FOO = bar
แล้วลองแล้วset FOO=
จะไม่ยกเลิกการตั้งค่า "FOO" ด้วยเหตุผลบางอย่าง แต่พวกเขาไม่ได้ (เป็น?) % %
ภายในอย่างมีนัยสำคัญ
ฉันจะเสนอสิ่งต่อไปนี้เป็นเพียงความคิดเห็น แต่ฉันคิดว่ามันสำคัญพอที่จะยืนหยัดด้วยตัวเอง
คำตอบก่อนหน้านี้จำนวนมากกล่าวว่าเราต้องระวังช่องว่างต่อท้าย และแน่นอนว่าเป็นความจริง อย่างไรก็ตามฉันพบว่าบางครั้งการเว้นวรรคต่อท้ายก็แค่ต้องการเข้าไปในนั้นไม่ว่าจะเกิดอะไรขึ้น - โดยเฉพาะอย่างยิ่งถ้าคุณกำลังทำบรรทัดคำสั่งแบบบรรทัดเดียวและต้องการพื้นที่เป็นตัวคั่นคำสั่ง
นี่คือวิธีแก้ปัญหานั้น:
SET FOO=Bar
echo %FOO%
:: outputs Bar
SET "FOO="
echo %FOO%
:: outputs %FOO%
การตัดคำประกาศด้วยเครื่องหมายอัญประกาศคู่ด้วยวิธีนี้จะช่วยหลีกเลี่ยงปัญหาการเว้นวรรคได้ทั้งหมด นอกจากนี้ยังมีประโยชน์มากเมื่อมีการสร้างตัวแปรโดยการต่อกันเพื่อกำจัดช่องว่างระหว่าง - เช่น - พา ธ เช่น:
SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: outputs "C:\Users\ Daniel"
:: Notice the undesirable space there
cmd.exe
) จริง ๆ ??