Windows: Komut satırı metin dosyasına da çıktı alırken metin satırına yönlendirme


30

Windows'da bir C programı yazıyorum, printf çağrılarımı komut satırına yazdır ve bu çıktıların hepsini bir metin dosyasına yönlendirebileceğimi biliyorum:

myProgram.exe > mylog.txt

Ancak, konsola yazdırılacak çıktıları görmek ve hepsini bir metin dosyasına kaydetmek istiyorum.

Bunu yapmanın bir yolu var mı? Günlük dosyasını izlemek için kuyruk kullanmayı düşünüyordum.


Bazen yaptığım şey başka bir cmd bilgi istemi penceresi açmak ve art arda mylog.txt türünü yürüterek (veya notlog mylog.txt dosyasını yapabilir) ve nasıl geliştiğini görebiliyor. tee olsa harika bir tane gibi görünüyor.
barlop


Yanıtlar:


19

Windows PowerShell , teeaynısını yapan unix aracından sonra adlandırılmış bir araca sahiptir.

Alternatif olarak, teewindows için unix portları vardır :


3
powershell harika bir ipucu, cmd olabilir sadece henüz hareket etmemiş insanlar için! Gnuwin32 kullanmak, unxutils kullanmaktan daha iyidir, unxutils oldukça eskidir. gnuwin32 daha yeni ve muhtemelen her şeyde yeni şeyler de var ve çok daha fazla fayda var. başka yerlerde de belirtildiği gibi, gnuwin32 coreutils'in tee
barlop'u

Aynı, başka bir üçüncü parti komut satırı kullanımındaki CMDer'de de çalışır.
Rauni

1
Bu cevap olarak superuser.com/a/273112/213743 BaconBits PowerShell işaret tee hattı odaklı şudur: çıkışında bir hat satır karakteri karşılaşıldığında "Bir sonu hattı karakteri kadar ulaşıldığında" olmaz. BaconBits unix düşündürmektedir vuruşu her zaman hemen ileri içeriği.
buzz3791,

8

Windows altında tek düşünebildiğim bunu yapmak:

myProgram.exe > mylog.txt & type mylog.txt

Bu, sorunuzdaki komut örneğine dayanmaktadır - aslında çıktıyı eklemek mylog.txtistiyorsanız, >>bunun yerine kullanmak istersiniz >, ancak typeyalnızca eklenmiş olanları değil tüm günlük dosyasını yazdırırsınız.

Eğer indirirseniz GnuWin32 coreutils , Unix yöntemi (kullanabilirsiniz teeBunu yapmak için komut):

myProgram.exe | tee mylog.txt

Bu, myProgram.exe dosyasının çıktısını yazacak, mylog.txtancak aynı zamanda konsola görüntüleyecektir. Yalnızca eklemek istediğinizde mylog.txt, -aparametreyi tee'ye iletebilirsiniz .


2
Tişört çözümü çok daha iyi görünüyor. Bahsettiğiniz diğer şey eşzamanlı değildir.
barlop

1
@ barlop - Kabul ediyorum, ilk çözüm, yerel olarak Windows'ta yapamayacağınız için bir çözüm. tee burada güzel hile yapar :)
Gaff

Yardımın için teşekkürler, beğenildi, tee ile gitti, ancak lesmana tee dediği zaman birkaç dakika önce geldi :)
user79397

'Type' komutunu bırakırsanız, görev tamamlandığında dosyayı varsayılan düzenleyicide (benim için not defteri) açar.
Josh Stribling


0

Sadece benzer bir ihtiyacım vardı ve OP'nin önerebileceği şekilde Tail'i kullandım:

>C:\Temp\Commands_Log.txt (
START tail.exe -f C:\Temp\Commands_Log.txt

Some_Commands
Other_Commands

echo.
echo ALL DONE HERE!
echo.
echo IT IS NOW SAFE TO CLOSE THIS WINDOW!
)

"> C: \ Temp \ Commands_Log.txt", günlük dosyasını oluşturur ve (parantez içinde) bulunan tüm komutların çıktısını ekler.

Parantez içindeki ilk komut, yeni bir komut penceresinde açılacak olan Kuyruğu başlatmak olmalıdır.

Sonunda yankı, yabancı kullanıcılar için her şeyin ne zaman tamamlandığını bilmelerini sağlar.

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.