Windows: Chuyển hướng dòng lệnh thành tệp văn bản trong khi cũng thấy đầu ra


30

Tôi đang viết chương trình C trong Windows, printf của tôi gọi in ra dòng lệnh và tôi biết rằng tôi có thể chuyển hướng tất cả đầu ra này sang tệp văn bản bằng cách sử dụng:

myProgram.exe > mylog.txt

Tuy nhiên, tôi cũng muốn thấy đầu ra sẽ được in ra bàn điều khiển cũng như ghi nhật ký tất cả vào một tệp văn bản.

Có cách nào để làm việc này không? Tôi đã nghĩ đến việc sử dụng đuôi để theo dõi tệp nhật ký.


Những gì tôi đã làm đôi khi là mở một cửa sổ nhắc cmd khác và liên tục thực thi loại mylog.txt (hoặc có thể không ghi chú mylog.txt) và xem cách nó phát triển. tee trông giống như một tuyệt vời mặc dù.
barlop


Câu trả lời:


19

Các cửa sổ PowerShell có một công cụ có thể làm điều đó, được đặt tên theo teecông cụ unix cũng làm như vậy.

Ngoài ra, có các cổng của unix teecho windows:


3
powershell là một mẹo tuyệt vời, có thể cmd chỉ dành cho những người chưa chuyển đến! Sử dụng gnuwin32 tốt hơn so với sử dụng unxutils, unxutils khá cũ. gnuwin32 mới hơn và có lẽ cũng có mọi thứ trong unxutils, và có nhiều tiện ích hơn. như đã đề cập ở những nơi khác, gutwin32 coreutils có tee
barlop

Tương tự hoạt động trong CMDer, một dòng lệnh bên thứ 3 khác sử dụng.
Rauni

1
Trong câu trả lời này, superuser.com/a/273112/213743 BaconBits chỉ ra rằng tee PowerShell được định hướng theo dòng: nó sẽ không xuất ra một dòng "cho đến khi gặp phải một ký tự dòng cuối". BaconBits gợi ý rằng tee unix luôn chuyển tiếp nội dung ngay lập tức.
buzz3791

8

Trong Windows tất cả những gì tôi có thể nghĩ là làm điều này:

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

Điều này dựa trên ví dụ lệnh trong câu hỏi của bạn - nếu thực tế bạn muốn nối đầu ra vào mylog.txtthì bạn muốn sử dụng >>thay vì >, nhưng typesẽ in ra toàn bộ tệp nhật ký, không chỉ những gì đã được thêm vào.

Nếu bạn tải xuống GnuWin32 CoreUtils , bạn có thể sử dụng phương thức ( teelệnh) Unix để thực hiện việc này:

myProgram.exe | tee mylog.txt

Điều này sẽ ghi đầu ra của myProgram.exe vào mylog.txtnhưng cũng hiển thị nó ra bàn điều khiển cùng một lúc. Nếu bạn chỉ muốn nối thêm mylog.txtthì bạn có thể truyền -atham số cho tee.


2
Các giải pháp tee trông tốt hơn nhiều. Một điều khác mà bạn đề cập không đồng thời.
barlop

1
@barlop - Tôi đồng ý, giải pháp đầu tiên là một chút cách giải quyết vì bạn không thể làm điều đó một cách tự nhiên trong Windows. tee thực hiện thủ thuật độc đáo ở đây :)
Gaff

Cảm ơn sự giúp đỡ, nâng cao, đi với tee nhưng lesmana đã có một vài phút trước đó khi anh ấy / cô ấy đề cập đến tee :)
user79394

Nếu bạn rời khỏi 'gõ', nó sẽ mở tệp trong trình chỉnh sửa mặc định (notepad cho tôi) khi tác vụ hoàn tất.
Josh Stribling

0

Tôi sử dụng Visual Studio Code và mở tệp nhật ký từ đó, nó giữ cho chế độ xem được cập nhật gần thời gian thực khi tệp nhật ký thay đổi


0

Tôi chỉ có một nhu cầu tương tự và sử dụng Tail như OP gợi ý họ có thể:

>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" tạo tệp nhật ký và thêm đầu ra từ tất cả các lệnh nằm bên trong (dấu ngoặc đơn).

Lệnh đầu tiên bên trong dấu ngoặc đơn là khởi động Đuôi, sẽ mở trong cửa sổ lệnh mới.

Phần cuối của echo dành cho những người dùng không quen biết để cho họ biết khi nào mọi thứ hoàn tất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.