Bagaimana cara menghapus variabel cmd?

89

Katakanlah saya menjalankan yang berikut ini di shell CMD:

SET "FOO=bar"

Apakah ada cara untuk membatalkan definisi variabel ini selain mendaur ulang shell CMD?

pengguna288004
sumber
10
Apakah Anda benar-benar berarti MS-DOS (yang telah mati selama setidaknya 10 tahun atau lebih) - atau yang Anda katakan MS-DOS tetapi benar-benar berarti baris perintah Windows ( cmd.exe) ??
marc_s
4
Mungkin, tapi tidak terlalu penting untuk pertanyaan itu ...
Madara's Ghost
4
Marc benar. Ini bukan shell MS-DOS. Orang tidak pernah tahu bahwa ini adalah perbedaan besar.
Michael-O
@MadaraUchiha, Memang, set var=jawaban Anda bekerja di bawah MS-DOS 6.22 command.com sama seperti di Windows cmd.exe. (Namun, tidak seperti Windows, menempatkan tanda kutip ganda di sekitar var = tidak berfungsi, melainkan membuat variabel lingkungan yang namanya dimulai dengan tanda kutip ganda.)
Simon Kissane

Jawaban:

137

Ya, Anda dapat membatalkannya dengan

set FOO=

Atau secara eksplisit menggunakan:

set "FOO="

Pastikan tidak ada karakter asing (tidak terlihat) yang tertinggal setelah =tanda. Itu adalah:

  • set FOO=berbeda dari set FOO=      .
Hantu Madara
sumber
29

Cara aman untuk menghapus variabel adalah dengan menggunakan juga tanda kutip, maka tidak ada masalah dengan spasi tambahan.

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

metode lain

@Echo oFF

setlocal
set FOO=bar
echo %FOO%
endlocal

echo %FOO%

pause

Catatan: Ini tidak akan berfungsi pada prompt perintah interaktif. Tetapi bekerja dalam skrip batch.

walid2mi.dll
sumber
9

Ini berfungsi untuk saya di shell CMD Windows 7 saya:

set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
Pekka
sumber
2
Spasi penting dalam setperintah. Jika Anda mencoba set FOO = bardan kemudian mencoba set FOO=, ini tidak akan menghapus 'FOO'. Untuk beberapa alasan, meskipun, mereka tidak (sebagai?) Signifikan di dalam % %.
Ted Hopp
Ruang trailing juga penting. Maaf untuk pengeditannya, saya pikir perwakilan Anda mengatakan 270, bukan 270k ... ups. Saya sering mengedit jawaban ketika perwakilan menyarankan pengguna tidak kembali. Jelas tidak terjadi di sini. Kesalahanku.
chappjc
@chappjs tidak masalah, terima kasih atas pengeditannya! Tidak yakin bagaimana saya melewatkannya.
Pekka
4

Saya akan menawarkan yang berikut ini hanya sebagai komentar, tetapi menurut saya cukup penting untuk berdiri sendiri.

Banyak dari jawaban sebelumnya menyebutkan bahwa seseorang perlu berhati-hati terhadap spasi yang tertinggal; dan pasti itu benar. Namun saya telah menemukan bahwa terkadang spasi tambahan hanya ingin masuk ke sana apa pun yang terjadi - terutama jika Anda melakukan baris perintah satu baris dan membutuhkan spasi sebagai pemisah perintah.

Inilah solusi untuk masalah itu:

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

Dengan membungkus deklarasi dalam tanda kutip ganda seperti itu, masalah spasi dapat dihindari sepenuhnya. Ini juga bisa sangat berguna ketika variabel dibuat dengan menggabungkan untuk menghilangkan spasi di antara - misalnya - jalur, misalnya:

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