2010-11-22 24 views
1

Bazı veriler için bir çıktı dosyasını ayrıştırmaya çalışıyorum ve değeri Windows kabuğuma döndürmekte sorun yaşıyorum.Tek satırlık Perl komut dosyasından geri alma

Yapmaya çalıştığım şey basit bir normal ifade kullanarak bir değer döndürmek ve bunu kabuk değişkenimde saklamak. Perl.exe yerel bir kopyasını

%VAL% = %PERL% -e '$tmp="Value: 1000"; if ($tmp =~ /Value:\s(\d+)/) { print $1; }' 
ben $1 bulundu ne iade etmek istiyorum nereye %VAL% olduğunu

ve %PERL% puan:

Şu anda böyle bir şey var.

Birisi bunu yapmanın uygun yolunu işaret edebilir mi?

cevap

2

DÜZENLEME: Unix biraz daha çirkin açıklanmıştır:

for /f "tokens=*" %i in ('perl -e "$tmp=\"Value: 1000\"; if ($tmp =~ /Value:\s(\d+)/) { print $1; }"') do set VAL = %i 

Veya bir ara dosya ile set /p kullanın:

%PERL% -e '$tmp="Value: 1000"; if ($tmp =~ /Value:\s(\d+)/) { print $1; }' > file.txt 
set /p VAL = < file.txt 
del file.txt 

Silly Batch File Tricks

+0

teşekkürler! oldukça güzel çalıştı – espais

0

Neden bu betik içindeki değişkeni yaratmıyorsunuz? win32 perl wiki üzerinde env_var bakın.

+1

itibaren değişken env_var ile ayarlanırsa, o olacak Sadece betik içinden başlatılan programlarda görünür - ancak betik bittiğinde betik dışına aktarılmayacaktır – cristis

+0

Bilmiyor (ve test edemez) ama bir "ihracat" ın yapacağı gibi düşündüm. benim hatam! – Aif