Windows: การเปลี่ยนเส้นทางบรรทัดคำสั่งไปยังไฟล์ข้อความขณะเดียวกันก็เห็นผลลัพธ์


30

ฉันกำลังเขียนโปรแกรม C ใน Windows สาย printf ของฉันพิมพ์ไปที่บรรทัดคำสั่งและฉันรู้ว่าฉันสามารถเปลี่ยนเส้นทางผลลัพธ์ทั้งหมดนี้ไปยังไฟล์ข้อความโดยใช้:

myProgram.exe > mylog.txt

อย่างไรก็ตามฉันต้องการเห็นผลลัพธ์ที่จะถูกพิมพ์ไปยังคอนโซลรวมทั้งบันทึกทั้งหมดในไฟล์ข้อความ

มีวิธีทำเช่นนี้หรือไม่? ฉันคิดว่าใช้หางเพื่อตรวจสอบล็อกไฟล์


สิ่งที่ฉันทำในบางครั้งคือเปิดหน้าต่างพรอมต์คำสั่ง cmd อีกครั้งและดำเนินการพิมพ์ mylog.txt ซ้ำ ๆ (หรืออาจทำแผ่นจดบันทึก mylog.txt) และดูว่ามันพัฒนาอย่างไร ทีดูเหมือนว่ายอดเยี่ยมแม้ว่า
barlop


คำตอบ:


19

PowerShell ของ windows มีเครื่องมือที่สามารถทำได้โดยตั้งชื่อteeตามเครื่องมือ unix ซึ่งทำเช่นเดียวกัน

อีกวิธีหนึ่งคือมีพอร์ตของ unix teeสำหรับ windows:


3
PowerShell เป็นเคล็ดลับที่ยอดเยี่ยมอาจเป็นคำสั่งสำหรับผู้ที่ยังไม่ได้ย้าย! การใช้ gnuwin32 นั้นดีกว่าการใช้ unxutils, unxutils นั้นค่อนข้างเก่า gnuwin32 เป็นรุ่นใหม่กว่าและอาจมีทุกอย่างใน unxutils ด้วยและมีสาธารณูปโภคมากขึ้น ดังที่กล่าวไว้ในที่อื่น gnuwin32 coreutils มีที
บาร์บ

ทำงานเหมือนกันใน CMDer ซึ่งเป็นบรรทัดรับคำสั่งของบุคคลที่สาม
Rauni

1
ในการนี้คำตอบsuperuser.com/a/273112/213743 BaconBits ชี้ให้เห็นว่า PowerShell ทีเป็นสายที่มุ่งเน้น: มันจะส่งออกไม่ได้เป็นเส้น "จนกระทั่งตัวละครที่ปลายของสายถึง" ตัวอักษรขึ้นบรรทัดใหม่จะพบ BaconBits แนะนำว่ายูนิกซ์ทีออฟจะส่งต่อเนื้อหาทันที
buzz3791

8

ภายใต้ Windows ทั้งหมดฉันคิดว่าจะทำเช่นนี้:

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

นี่เป็นไปตามตัวอย่างคำสั่งในคำถามของคุณ - หากจริงแล้วคุณต้องการผนวกเอาต์พุตไปยังmylog.txtคุณต้องการใช้>>แทน>แต่typeจะพิมพ์ไฟล์บันทึกทั้งหมดไม่ใช่แค่สิ่งที่ต่อท้าย

หากคุณดาวน์โหลดGnuWin32 CoreUtilsคุณสามารถใช้วิธี Unix ( teeคำสั่ง) เพื่อทำสิ่งนี้:

myProgram.exe | tee mylog.txt

นี่จะเขียนผลลัพธ์ของ myProgram.exe ไปmylog.txtยัง แต่จะแสดงไปยังคอนโซลในเวลาเดียวกัน หากคุณต้องการต่อท้ายmylog.txtคุณสามารถส่ง-aพารามิเตอร์เพื่อที


2
วิธีการแก้ปัญหาทีดูดีขึ้นมาก อีกสิ่งที่คุณพูดถึงไม่พร้อมกัน
barlop

1
@barlop - ฉันเห็นด้วยวิธีแก้ปัญหาแรกเป็นวิธีแก้ปัญหาเล็กน้อยเนื่องจากคุณไม่สามารถทำได้ใน Windows ทีไม่หลอกลวงอย่างที่นี่ :)
ฉมวกแทงปลา

ขอบคุณสำหรับความช่วยเหลือ upvoted, ไปกับ tee แต่ lesmana ได้ในไม่กี่นาทีก่อนหน้านี้เมื่อเขา / เธอพูดถึง tee :)
user79397

หากคุณไม่ใช้งาน 'ชนิด' ไฟล์นั้นจะเปิดไฟล์ในเครื่องมือแก้ไขเริ่มต้น (แผ่นจดบันทึกสำหรับฉัน) เมื่องานเสร็จสมบูรณ์
Josh Stribling

0

ฉันใช้Visual Studio Codeและเปิดไฟล์บันทึกจากตรงนั้นมันทำให้มุมมองทันสมัยอยู่เสมอใกล้เวลาจริงเมื่อล็อกไฟล์เปลี่ยนแปลง


0

ฉันเพิ่งมีความต้องการที่คล้ายกันและใช้ Tail เป็น OP แนะนำว่าพวกเขาอาจ:

>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" สร้างล็อกไฟล์และเพิ่มเอาต์พุตจากคำสั่งทั้งหมดที่อยู่ภายใน (วงเล็บ)

คำสั่งแรกในวงเล็บควรจะเริ่มต้นหางซึ่งจะเปิดในหน้าต่างคำสั่งใหม่

เสียงสะท้อนในตอนท้ายมีไว้สำหรับผู้ใช้ที่ไม่คุ้นเคยเพื่อให้พวกเขารู้ว่าเมื่อทุกอย่างเสร็จสมบูรณ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.