Trong câu hỏi của bạn, bạn đề cập đến:
"... nó sẽ đặt đầu ra vào một tệp nhưng không thực sự thực hiện nó. Trong trường hợp của tôi, tôi sẽ cần nó được thực thi và sau đó đăng nhập vào một tệp để tham khảo sau."
Vì bạn nói rằng chương trình đang chạy và đầu ra của nó đang được đưa vào tệp, tôi nghĩ rằng bạn có thể có nghĩa là "được hiển thị" , thay vì "thực thi" .
Nếu đó không phải là ý bạn, thì có lẽ nó sẽ có ích nếu điều đó được giải thích tốt hơn, có lẽ với một số đầu ra mẫu.
Trong mọi trường hợp, tôi đang đăng câu trả lời này trong trường hợp có những người khác thấy câu hỏi / câu trả lời này hữu ích.
Vì vậy, về cơ bản, có vẻ như bạn muốn đầu ra của tập lệnh được ghi vào tập tin và cũng có thể thấy đầu ra của tập lệnh trên màn hình trong khi tập lệnh đang chạy.
(tl; dr phiên bản: sử dụng wintee , như thế này:
script 2>&1 | wtee logfile.txt
)
Đối với bài đăng này, tôi sẽ sử dụng một tệp thử nghiệm nhỏ, nhưng tập lệnh của bạn có thể lớn và phức tạp hoặc đơn giản như bạn cần:
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.
Đây là những gì xảy ra khi tôi chạy tập lệnh bó này:
C:\>a.cmd
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
Lưu ý rằng trong tập lệnh thử nghiệm, lần thực hiện đầu tiên của lệnh "dir" thành công và lần thứ hai thất bại. Tôi làm điều này chỉ để hiển thị những gì sẽ xảy ra với "thông báo lỗi" khi bạn chạy tập lệnh của mình.
Nếu tôi chạy tập lệnh và sử dụng chuyển hướng ( ">" ) để chụp đầu ra, tôi sẽ thấy điều này
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:\>
Lưu ý thông báo lỗi "Không tìm thấy tệp" được hiển thị trên màn hình khi tập lệnh được chạy và không thực sự được ghi vào tệp. Đó là bởi vì ">" thu được "đầu ra bình thường" đã được gửi đến luồng STDOUT. "Thông báo lỗi" thường được gửi đến luồng STDERR.
Để chụp "đầu ra bình thường" và "thông báo lỗi", bạn cũng cần phải bắt luồng STDERR, được biểu thị bằng "2" trong "2> & 1" trong lệnh tại đây:
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
Trong unix, có một lệnh tiêu chuẩn: "tee"
Sử dụng lệnh "tee", bạn có thể chụp đầu ra từ một chương trình, đồng thời cũng hiển thị đầu ra ra màn hình.
Lệnh "tee" không chuẩn với windows, nhưng bạn có thể tải xuống phiên bản "tee" miễn phí cho windows tại đây:
wintee . Chương trình tải xuống được đặt tên : "wtee.exe"
.
Bạn sử dụng chương trình "wtee.exe" như hình bên dưới.
Thao tác này sẽ chụp đầu ra tập lệnh vào tệp có tên "log.txt"
như trước và nó cũng sẽ hiển thị đầu ra ra màn hình trong khi tập lệnh đang chạy:
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