2017-03-16 91 views
13

İşte basit ama şaşırtıcı bir soru. Komut İstemi penceresinde ECHO olarak örnekWindows tanımlanmamış ortam değişkeni kullanımı?

için tanımlanmamış bir, Windows ortam değişkeni, abc için

[% abc%] [% abc%]

Ama .CMD toplu dosya ECHO içinde

[% sonuçlanır abc%], sonuç []

Neden fark var? ECHO komutunu araştırdım ve bunun hakkında hiçbir şey bulamadım. Bu ince farkın nerede geçerli olabileceği konusunda endişeliyim.

+7

Gerçekten ilgileniyorsanız, bu yanıtı (http://stackoverflow.com/a/4095133/6811411) toplu iş ve cmd satır yorumlayıcısının iç ayrıştırmasını vurgulayarak inceleyin. – LotPings

+6

Kısa bir özet: ECHO komutundan bağımsız olarak, genişletme kuralları cmd bağlamından toplu dosya bağlamı – jeb

+2

ile farklıdır. Bu noktayı iyi bir şekilde kullanabilirsiniz. Örneğin, komut isteminde: '% a için (* .txt) do @set" var =% a "& çağrı eko Dosya:% var%'. Bunun çalışması için 'var' değişkeninin undefined olması gerektiğini unutmayın ... – Aacini

cevap

1

Gerçekten güzel bir soru! Kafa karıştırıcı ha?

Toplu komut dosyalarını ve komut satırı komutlarını ayrıştırmakta kullanılan iki ayrı ayrıştırıcı vardır.

this excellent answer alıntı :

BatchLineParser - hatları veya bloklar

CmdLineParser için toplu dosyaların içindeki ayrıştırıcı, - BatchLineParser gibi, ancak doğrudan komut istemine, farklı

işleri

Anahtar fark, ayrıştırma işleminin ilk aşamasındadır, özellikle de %var%:

BatchLineParser içinde var yoksabelirtilmemişse hiçbir şey kullanılmayacaksa, ifade değişmeyecektir.

Neden birisi böyle tasarladı? Hiçbir fikrim yok.