Bir cmd değişkenini nasıl kaldırırım?


89

CMD kabuğunda aşağıdakileri çalıştırdığımı varsayalım:

SET "FOO=bar"

CMD kabuğunu geri dönüştürmek dışında bu değişkeni tanımlamanın bir yolu var mı?


10
Mi gerçekten ortalama MS-DOS (en az 10 yıl kadar önce öldü) - Dediğin ya do MS-DOS ama gerçekten (Windows komut satırı anlamına cmd.exe) ??
marc_s

4
Muhtemelen, ama bu soru için gerçekten önemli değil ...
Madara's Ghost

4
Marc haklı. Bu, MS-DOS kabuğu değildir. İnsanlar bunun büyük bir fark olduğunu asla öğrenmezler.
Michael-O

@MadaraUchiha, Gerçekten, set var=cevabınız MS-DOS 6.22 command.com altında Windows cmd.exe altında olduğu gibi çalışır. (Bununla birlikte, Windows'un aksine, var = çevresine çift tırnak işareti koymak işe yaramaz, bunun yerine adı çift tırnakla başlayan bir ortam değişkeni oluşturur.)
Simon Kissane

Yanıtlar:


137

Evet, ayarını kaldırabilirsiniz

set FOO=

Veya açıkça kullanarak:

set "FOO="

İşaretten sonra hiçbir yabancı (görünmez) karakterin gelmediğinden emin olun =. Yani:

  • set FOO=farklıdır set FOO=      .

29

Değişkeni silmenin güvenli bir yolu da tırnak işaretleri kullanmaktır, bu durumda sondaki boşluklarla ilgili sorun olmaz.

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

11

diğer yöntem

@Echo oFF

setlocal
set FOO=bar
echo %FOO%
endlocal

echo %FOO%

pause

Not: Bu, etkileşimli bir komut isteminde çalışmaz. Ancak toplu komut dosyasında çalışır.


9

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

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

2
Komutta boşluklar önemlidir set. Dener set FOO = barve sonra denerseniz set FOO=, "FOO" yu bozmaz. Bazı nedenlerden dolayı, içlerinde (ne kadar?) Önemli değiller % %.
Ted Hopp

Sondaki boşluk da önemlidir. Düzenleme için üzgünüm, temsilcinizin 270 bin değil 270 dediğini sanıyordum ... oops. Temsilci kullanıcının geri gelmediğini önerdiğinde genellikle yanıtları düzenlerim. Açıkçası burada durum böyle değil. Benim hatam.
chappjc

@chappjs sorun değil, düzenleme için teşekkürler! Bunu nasıl kaçırdığımdan emin değilim.
Pekka

4

Aşağıdakileri sadece bir yorum olarak sunabilirim, ancak kendi başına duracak kadar önemli olduğunu düşünüyorum.

Önceki cevapların çoğu, takip eden boşluklara dikkat edilmesi gerektiğinden bahsetti; ve kesinlikle bu doğru. Bununla birlikte, bazen takip eden boşlukların ne olursa olsun oraya girmek istediğini gördüm - özellikle tek satırlık bir komut satırı yapıyorsanız ve bir komut ayırıcı olarak alana ihtiyacınız varsa.

Bu sorunun çözümü şudur:

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

Bildirimi bu şekilde çift tırnak içine alarak boşluk sorunu tamamen önlenebilir. Bu, değişkenler aradaki boşlukları ortadan kaldırmak için birleştirilerek oluşturulduğunda da gerçekten yararlı 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.