Soru Windows Batch Script: TÜM çıktıyı bir dosyaya yönlendir


Çeşitli Java kriterlerini çalıştırıyorum ve sonuçları arşivlemek istiyorum. Bu gibi (dacapo) kriterlerini uygularım:

C:\VM\jre\bin\java  -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% > %time::=%

Karşılaştırma türünü bir parametrenin üstünden geçiriyorum, bu% arg1% değerinin.

Çıktının bir metin dosyasına yönlendirildiğini görebilirsiniz. Ne yazık ki, çıktının ilk ve son satırı hala metin dosyasında değil, konsolda yazdırılır:

===== DaCapo 9.12 luindex starting =====
===== DaCapo 9.12 luindex PASSED in 2000 msec =====

Özellikle son satırın metin dosyasında bulunması önemlidir :)

Bu davranışı zorlamak için bir hile var mı?


25
2018-03-11 19:24


Menşei




Cevaplar:


Yönlendirmelisin STDOUT ve STDERR.

command > logfile 2>&1

STDIN dosya tanıtıcı # 0, STDOUT dosya tanıtıcısı # 1 ve STDERR dosya tanıtıcısı # 2.
"Komut dosyası" olarak yeniden yönlendirir STDOUT bir dosyaya, ayrıca rasgele dosya tanımlayıcılarını birbirine yönlendirebilirsiniz. >& operatör dosya tanıtıcıları arasında yönlendirir. Yani, 2 >& 1 hepsini yönlendirir STDERR çıktı STDOUT.

Ayrıca, eklemeye dikkat edin 2>&1 talimatın sonunda, Windows üzerinde, yeniden yönlendirme sırası, command 2>&1 > logfile Dawid'in yorumlarda eklediği gibi boş bir dosya üretecek.


47
2018-03-11 19:27



2> & 1 ne anlama geliyor? Anlaşılmaz sözdizimi söylemek, en yüksek düzenin bir iltifatını olurdu. - vargonian
STDIN dosya tanıtıcısı # 0. STDOUT dosya tanıtıcısı # 1'dir. STDERR dosya tanıtıcısı # 2'dir. "Komut> dosya" STDOUT bir dosyaya yönlendirir gibi, aynı zamanda rasgele dosya tanımlayıcılarını birbiriyle yeniden yönlendirebilirsiniz. "> &" Operatörü dosya tanıtıcıları arasında yönlendirir. Yani, "2> & 1" tüm STDERR çıktısını STDOUT'a yönlendirir. - Zach Riggle
Çok teşekkür ederim, Zach, bu onu kızdırdı! - vargonian
@ZachRiggle upvoted, ancak STDIN / STDERR hakkındaki yorumunuzu ve yanıtın açıklamasını ekleyebilir misiniz? Bence bu çok yararlı bir bilgi! - aikeru
windows üzerinde yeniden yönlendirme sırası önemlidir command 2>&1 > logfile boş dosya üretecek - Dawid


Komutunuza 2> & 1 ekleyin:

 C:\VM\jre\bin\java  -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% 2>&1 > %time::=% 

Bu STDERR'i STDOUT'a yönlendirecek ve daha sonra metin dosyanıza yönlendirilecektir.


5
2018-03-11 19:27