Toplu iş dosyası çıktısının tamamını günlüğe kaydetme


12

Bir bilgisayarda birden çok ayar yapmak için bir komut satırı komut dosyası kullanıyorum. Ancak, tüm çıktı da .txt veya .log dosyasına oturum açmış olmasını istiyorum.

Günlük sistemi hakkındaki temel bilgimi kullandığımda çıktıyı bir dosyaya koyacağım ama aslında yürütmeyeceğim. Benim durumumda yürütülmesi ve daha sonra başvurmak için bir dosyaya giriş gerekir.

Birisi bana bunun nasıl yapılacağını söyleyebilir mi?

Şimdiden teşekkürler! Dempsey


Bir işletim sistemi bile belirtmediniz!
Michael Hampton

Yanıtlar:


11

Soru bir komut dosyasının "yürütülmesini" isterse ve tüm toplu iş dosyası Windows 8.1'de bir günlük dosyasına gönderilirse, basit yanıt şudur:

Bunu toplu dosyanızın başına ekleyin ...

@echo off
set LOGFILE=batch.log
call :LOG > %LOGFILE%
exit /B

:LOG
[ your script goes here ]

Mükemmel teşekkür ederim! (Tabii ki,% LOGFILE% burada gerçekten gerekli değil.: P)
Andrew

1
Betiğim bir soru soruyor - eğer kullanılmışsa görmüyorum. Her şeyi nasıl kaydedebilir ve yürütürken ekranda nasıl görebilirim?
Simon

Evet, ekranınızdayken görebilmek için bunu nasıl yapardınız?
karl-police

3

Sorunuzda şunları belirtiyorsunuz:

"... çıktı bir dosyaya koyacak ama aslında yürütmek değil. Benim durumumda yürütmek ve daha sonra başvurmak için bir dosyaya giriş gerekir."

Programın çalıştığını ve çıktısının dosyaya konulduğunu söylediğiniz için , "yürütülen" yerine "görüntülenen" anlamına gelebileceğini düşündüm .

Kastettiğiniz şey bu değilse, muhtemelen daha iyi açıklansaydı, belki de bazı örnek çıktılarla yardımcı olabilirdi.

Her durumda, bu soruyu / cevabı yararlı bulan başkaları olması durumunda bu cevabı gönderiyorum.

Yani, temel olarak, bir komut dosyasının çıktısının bir dosyaya kaydedilmesini ve komut dosyası çalışırken komut dosyasının çıktısını ekranda görebilmenizi istersiniz.

(tl; dr sürümü: wintee kullanın, şöyle :

script 2>&1 | wtee logfile.txt)


Bu yazı için, küçük bir test toplu dosyası kullanacağım, ancak komut dosyanız ihtiyacınız kadar büyük ve karmaşık veya basit olabilir:

C:\>type a.cmd
@echo off

echo Command: "dir /b a*"
dir /b a*
echo.

echo Command: "dir /b non-existant-file"
dir /b non-existant-file
echo.


Bu toplu komut dosyasını çalıştırdığımda olan şey budur:

C:\>a.cmd
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

Test komut dosyasında, "dir" komutunun ilk yürütmesinin başarılı olduğuna ve ikincisinin başarısız olduğuna dikkat edin. Bunu sadece senaryonuzu çalıştırdığınızda "hata mesajlarıyla" ne olacağını göstermek için yapıyorum.

Komut dosyasını çalıştırır ve çıktıyı yakalamak için yeniden yönlendirme ( ">" ) kullanırsam, bunu göreceğim

C:\>a.cmd > log.txt
File Not Found

C:\>type log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"

C:\>

Komut dosyası çalıştırıldığında ekranda "Dosya Bulunamadı" hata mesajının görüntülendiğine ve aslında dosyaya alınmadığına dikkat edin. Çünkü STDOUT akışına gönderilen ">" "normal çıktıyı " yakalar. "Hata mesajları" normalde STDERR akışına gönderilir.

Yakalama "normal çıktı" ve "hata mesajları" için ayrıca belirtilir STDERR akışı yakalamak gerekiyor "2" in "&> 1 2" Burada komutan:

C:\>a.cmd > log.txt 2>&1
C:\>type log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

Unix'te standart bir komut vardır: "tee"

"Tee" komutunu kullanarak, bir programdan çıktı yakalayabilir ve aynı zamanda çıktıyı ekrana görüntüleyebilirsiniz.

"Tee" komutu pencerelerde standart değildir, ancak Windows için "tee" nin ücretsiz sürümünü buradan indirebilirsiniz: wintee . İndirilen program adlandırılır: "wtee.exe".

Aşağıda gösterildiği gibi "wtee.exe" programını kullanın.

Bu, komut dosyası çıktısını daha "log.txt"önce adlandırılan dosyaya kaydeder ve komut dosyası çalışırken çıktıyı ekrana görüntüler:

C:\>a.cmd 2>&1 | wtee log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

C:\>type log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

0

Bu komut dosyası ls yürütecek ve çıktısını log.txt adlı bir dosyaya kaydedecektir:

exec >log.txt 2>&1
ls

Günlük yürütülmez.


1
Unix / Linux olduğunu varsayıyorum, ama tahminim OP Windows hakkında konuşuyor. Ayrıca bir komut dosyası çalıştırmıyor, ancak girdiğiniz komutların çıktısını günlüğe kaydediyor ve deliliği nasıl durduracağınızla ilgili kritik bilgileri atlıyor ...
Sven

Gerçekten Windows hakkında konuşuyorum. Teşekkürler olsa :)
Dempsey FoxDie Van Assche
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.