ฉันจะลบตัวแปร cmd ได้อย่างไร


89

สมมติว่าฉันดำเนินการต่อไปนี้ในเชลล์ CMD:

SET "FOO=bar"

มีวิธียกเลิกการกำหนดตัวแปรนี้หรือไม่นอกเหนือจากการรีไซเคิลเปลือก CMD


10
คุณหมายถึง MS-DOS จริงๆ (ซึ่งตายไปแล้วอย่างน้อย 10 ปีหรือมากกว่านั้น) หรือคุณพูดว่าMS-DOSแต่หมายถึงบรรทัดคำสั่งของ Windows ( cmd.exe) จริง ๆ ??
marc_s

4
เป็นไปได้ แต่มันไม่สำคัญสำหรับคำถามนั้นจริงๆ ...
Madara's Ghost

4
ถูกต้องของมาร์ค นี่ไม่ใช่เชลล์ MS-DOS ผู้คนไม่เคยเรียนรู้ว่านี่คือความแตกต่างที่ยิ่งใหญ่
Michael-O

@MadaraUchiha อันที่จริงset var=คำตอบของคุณทำงานภายใต้ MS-DOS 6.22 command.com เหมือนกับที่ทำใน Windows cmd.exe (อย่างไรก็ตามแตกต่างจาก Windows การใส่เครื่องหมายคำพูดคู่รอบ var = ไม่ได้ผล แต่จะสร้างตัวแปรสภาพแวดล้อมที่ชื่อขึ้นต้นด้วยเครื่องหมายคำพูดคู่)
Simon Kissane

คำตอบ:


137

ใช่คุณสามารถยกเลิกการตั้งค่าด้วยไฟล์

set FOO=

หรือโดยชัดแจ้งโดยใช้:

set "FOO="

ตรวจสอบให้แน่ใจว่าไม่มีอักขระภายนอก (มองไม่เห็น) ต่อท้าย=เครื่องหมาย นั่นคือ:

  • set FOO=แตกต่างจากset FOO=      .

29

วิธีที่ปลอดภัยในการยกเลิกการตั้งค่าตัวแปรคือการใช้เครื่องหมายคำพูดด้วยจะไม่มีปัญหากับการเว้นวรรคต่อท้าย

set FOO=bar
echo %FOO%
set "FOO=" text after the last quote is ignored
echo %FOO%

11

วิธีอื่น

@Echo oFF

setlocal
set FOO=bar
echo %FOO%
endlocal

echo %FOO%

pause

หมายเหตุ: สิ่งนี้จะใช้ไม่ได้กับพรอมต์คำสั่งแบบโต้ตอบ แต่ทำงานในสคริปต์แบทช์


9

สิ่งนี้ใช้ได้กับฉันในเชลล์ Windows 7 CMD ของฉัน:

set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it

2
ช่องว่างมีความสำคัญในsetคำสั่ง หากคุณลองset FOO = barแล้วลองแล้วset FOO=จะไม่ยกเลิกการตั้งค่า "FOO" ด้วยเหตุผลบางอย่าง แต่พวกเขาไม่ได้ (เป็น?) % %ภายในอย่างมีนัยสำคัญ
Ted Hopp

ช่องว่างต่อท้ายก็สำคัญเช่นกัน ขออภัยสำหรับการแก้ไขฉันคิดว่าตัวแทนของคุณบอกว่า 270 ไม่ใช่ 270k ... อ๊ะ ฉันมักจะแก้ไขคำตอบเมื่อตัวแทนแนะนำว่าผู้ใช้ไม่กลับมา แน่นอนว่าไม่ใช่กรณีนี้ ความผิดพลาดของฉัน.
chappjc

@chappjs ไม่มีปัญหาขอบคุณสำหรับการแก้ไข! ไม่แน่ใจว่าฉันพลาดไปได้อย่างไร
Pekka

4

ฉันจะเสนอสิ่งต่อไปนี้เป็นเพียงความคิดเห็น แต่ฉันคิดว่ามันสำคัญพอที่จะยืนหยัดด้วยตัวเอง

คำตอบก่อนหน้านี้จำนวนมากกล่าวว่าเราต้องระวังช่องว่างต่อท้าย และแน่นอนว่าเป็นความจริง อย่างไรก็ตามฉันพบว่าบางครั้งการเว้นวรรคต่อท้ายก็แค่ต้องการเข้าไปในนั้นไม่ว่าจะเกิดอะไรขึ้น - โดยเฉพาะอย่างยิ่งถ้าคุณกำลังทำบรรทัดคำสั่งแบบบรรทัดเดียวและต้องการพื้นที่เป็นตัวคั่นคำสั่ง

นี่คือวิธีแก้ปัญหานั้น:

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