2011-11-16 7 views
9

Bir virgülle ayrılmış paramater içeren bir toplu iş dosyasını çağırmak istiyorum. Bunu nasıl başarabilirim?Bir toplu iş dosyasında bir parametreyi virgül ayraçlı olarak çağırmak için

Bu örnek gibi olmasını istiyorum. Böyle toplu çalıştırmak istediğiniz

@echo off 
set test=%1 
echo Sample %test% batch. 

:

O yazılara bir text.bat var

c:\text.bat this,is,sample 

ve böyle bir sonuç bekliyorum:

Sample this,is,sample batch. 

Bunu nasıl başarabileceğime dair bir fikriniz var mı?

Teşekkürler.

+0

Yorumlarınız için teşekkürler. üzgünüm, sadece yeni buradayım. – quinekxi

cevap

14

Vay canına! Virgüllerin böyle davrandığını bilmiyordum.

İki seçeneğiniz var.

Bu komut dosyasını kullanabilirsiniz:

@echo off 
set test=%~1 
echo Sample %test% batch. 

Ve ile çalıştırın:

C:\text.bat "this,is,test" 

%~1 tırnaklar olmadan ilk argüman temsil eder. Tırnaklar, virgülle ayrılmış listeyi tek bir argüman olarak gruplandırır.

Ya

Bu komut dosyasını kullanabilirsiniz:

@echo off 
set test=%* 
echo Sample %test% batch. 

Ve ile çalıştırın: bunlar yazılan olarak

C:\text.bat this,is,test 

%* komut satırı argümanları temsil eder.

+0

teşekkürler dostum, işe yaradı! Evet. virgüller bu şekilde davrandı. – quinekxi

+0

Tüm argümanları% 9'un ötesine bile tek bir değişkene kaydırmak için bir döngü yazdım ama takılıyorum çünkü bir param vardı, a 'b' ama'% * 'en iyi çözüm. Teşekkürler. –

8

Batch dosyalarında, parametre sınırlayıcıları boşlukların yanı sıra virgül, noktalı virgül ve eşittir işaretlerinin yanı sıra, bunun doğrudan bir yolu yoktur. Tek seçenek, tırnak işareti: c:\text.bat "this,is,sample" arasındaki parametreyi kapatmak ve% 1 ile parametreyi almaktır: set test=%~1.

+1

teşekkürler dostum. Cevabınız basit ama her şeyi açıklıyor. :) – quinekxi

+0

Cevabınız değerli bir şey katıyor; bu, virgüllerin, noktalı virgüllerin ve eşit işaretlerin parametre sınırlayıcıları olarak sunulmasıdır. (Bu bana neden "shift" in virgülle ayrılmış dizeleri ayırdığını açıkladı.) Diğer cevap bunu söylemiyor. Ancak, orijinal posterin sahip olduğu tek seçeneğin '% ~ 1' kullanmak olduğunu söylüyorsunuz. Bu doğru değil; Başka bir seçenek (diğer cevapta belirtilen) '% *' kullanmaktır. Bu durumda, virgülle ayrılmış listenin tırnak içine alınmadığı fark etmez. – Alan

+1

@Alan: Soruyu okursanız, OP "bir parametre" yani "bir * parametresi" hakkında konuşuyor.Diğer cevap, _all parametrelerini kullanabilmeyi gerektirir, örneğin, "c: \ text.bat" gibi, aynı formda birden fazla parametre vermenin bir yolu yoktur, bu, örnek "" ikinci, param, ile, virgül "'. Bunu yapmanın tek yolu, _each parametresini tırnak içine almak ve '% ~ 1 've'% ~ 2'… – Aacini

İlgili konular