2011-08-28 12 views
54

CMD kabuğunda aşağıdakileri çalıştırdığımı söyleyelim:Bir MS-DOS değişkeni nasıl undefine edilir?

set FOO=bar 

CMD kabuğunun geri dönüşümü dışında bu değişkeni tanımlamak için bir yol var mı?

+9

Eğer ** gerçekten ** en az 10 ölü olan MS-DOS (kastediyorsunuz yıl ya da öylesine - ya da diyorsunuz * MS-DOS * ama gerçekten Windows komut satırı ('cmd.exe') demek? –

+3

Benzer şekilde, ama bu soru için gerçekten önemli değil ... –

+2

Marc haklı. Bu MS-DOS kabuğu değil. İnsanlar asla bunun büyük bir fark olduğunu öğrenmezler. –

cevap

83

Evet,

set FOO= 

Önemli Not ile Ayarını iptal edebilirsiniz: hayır sonda boşlukların/diğer görünmez karakterler = sonrasında olduğundan emin olun. ! set FOO= = set FOO= 

+7

Sadece boş bir boşluk olmadığından emin olun. :) –

+1

Siz haktasınız. Bunu dahil etmek için düzenlenmiş cevap. Teşekkür @ –

+10

Daha da iyisi: Açıklık için çift tırnak ekle: 'set" FOO = "' – kevinarpe

7

Bu benim Windows 7 CMD kabuğunda benim için çalışıyor:

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

"set" komutunda boşluklar önemlidir. Eğer 'FOO = bar' ayarını denerseniz ve 'FOO =' ayarlamayı denerseniz, 'FOO' değerini kaldırmaz. Bazı nedenlerle olsa da, bunlar %% 'içinde önemli değil. –

+0

@ İyi nokta! Sabit, teşekkürler. –

+0

Sondaki boşluk da önemlidir. Düzenlemediğim için üzgünüm, temsilcinin 270, 270k değil ... ... olduğunu söyledim. Çoğunlukla, kullanıcı geri gelmeyeceğini düşündürdüğünde cevapları sıklıkla düzenlerim.Açıkçası burada durum böyle değil. Benim hatam. – chappjc

25

değişkeni unset Güvenli bir şekilde daha sonra sonunda boşluk sorunların olmadığından, tırnak da kullanmaktır.

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

başka bir yöntem

@Echo oFF 

setlocal 
set FOO=bar 
echo %FOO% 
endlocal 

echo %FOO% 

pause 

Not: Bu interaktif bir komut istemine üzerinde işe yaramaz. Ama toplu komut dosyasında çalışır.

1

Aşağıdakileri sadece bir yorum olarak öneririm, ama bence kendi başına ayakta duracak kadar önemli.

bir sonunda boşluk sakınmak için ihtiyacı olan bahsedilen önceki cevapların çok; ve bunun doğru olduğuna eminim. Bununla birlikte, bazen sondaki boşlukların sadece oraya girmek istediğini fark ettim - özellikle bir komut satırı tek liner yapıyorsanız ve bir alan ayırıcısı olarak mekana ihtiyacınız varsa.

Bu

bu soruna çözüm:

SET FOO=Bar 
echo %FOO% 
:: outputs Bar 
SET "FOO=" 
echo %FOO% 
:: outputs %FOO% 

çift tırnak bu şekilde beyanı sararak, aralık sorunu tamamen önlenebilir. Bu değişkenler arasındaki boşlukları ortadan kaldırmak için birleştirerek oluşturulduğunda gerçekten yararlı da olabilir - örneğin yolları, - örneğin:

SET A=c:\users\ && SET D=Daniel 
SET P="%a%%d%" 
ECHO %P% 
:: outputs "C:\Users\ Daniel" 
:: Notice the undesirable space there 
İlgili konular