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