Kaçış toplu sözde değişken


0

Bir toplu iş dosyasını çalıştırmasını istediğim komutla çağırmam gerekiyor. Bu komut, geçerli dizine genişleyen% cd% sözde değişkeni içerir. Ben koşmak istiyorum de test "echo %cd%". Sorun, daha %cd%önce testadlandırılan genişlemektir .

Normalde, yüzde işaretlerini ikiye katlayarak bir değişkenden kaçabilirsiniz, ancak bu sözde değişkenlere uygulanmaz. Örneğin, echo %%ProgramFiles%%yazdırır %ProgramFiles%, ancak echo %%errorlevel%%yazdırır %0%. Ben ne yaparım?

Yanıtlar:


1

Windows Komut İstemi'ndeki genel amaçlı kaçış karakteri - \evrenin geri kalanındaki analogu - caret ( ^) ifadesidir . “ ^%cd^%” Deneyin .

(Düzenle)

… ve sonra,

yankı% 1> temp.bat
temp.bat çağrısı
del temp.bat

Evet, çok çirkin ve gerçekten daha iyi bir yol olmalı. Ben onu bulamıyorum.


Ah, ama şimdi geçerli dizin yerine test "echo ^%cd^%"yazdırıyor %cd%. İhtiyacım olan şey, sözde değişkeni senaryoya aktardığımda korunmasını ancak içeride genişlemesini sağlamak.
Don Reba,

Tamam, bu sorunu çözmek için cevabımı düzenledim.
Scott

0

CALL'ı da dahil etmeden pek şansım yok. Bu test.bat ile:

@%*

çağırma yankı ^% cd ^% çağrı test.bat beklendiği gibi eserler. Veya, ÇAĞRI'yi test.bat içerisine koyarak:

@CALL %*

ve test.bat çağırmak echo ^% cd ^% çalışır. (Test.bat başka bir komut dosyasından çağrıldığında, bir komut dosyasını kendisine iletmek zamanından önce çıkma riskini almayacağından, bu daha güvenlidir.)

Sanırım hangisinin sizin için daha iyi çalıştığını (veya herhangi birinin çalışması için yapılıp yapılmadığını) senaryonuzun özelliklerine bağlı olduğunu düşünüyorum.

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.