Đăng nhập toàn bộ đầu ra tệp bó


11

Tôi đang sử dụng tập lệnh dòng lệnh để điều chỉnh nhiều cài đặt trên máy tính. Tuy nhiên, tôi muốn có toàn bộ đầu ra cũng được đăng nhập vào tệp .txt hoặc .log.

Khi tôi sử dụng kiến ​​thức cơ bản của mình về hệ thống ghi nhật ký, 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.

Ai đó có thể cho tôi biết làm thế nào để làm điều này?

Cảm ơn trước! Dempsey


Bạn thậm chí chưa chỉ định một hệ điều hành!
Michael Hampton

Câu trả lời:


10

Nếu câu hỏi yêu cầu tập lệnh được "thực thi" và toàn bộ tệp bó sẽ được xuất thành tệp nhật ký trong Windows 8.1, thì đây là câu trả lời đơn giản:

Bao gồm điều này khi bắt đầu tập tin bó của bạn ...

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

:LOG
[ your script goes here ]

Tuyệt vời cảm ơn bạn! (Tất nhiên,% LOGFILE% không thực sự cần thiết ở đây .: P)
Andrew

1
Kịch bản của tôi đặt ra một câu hỏi - Tôi không thấy nó nếu điều này được sử dụng. Làm thế nào để đăng nhập mọi thứ và nhìn thấy nó trên màn hình trong khi thực hiện?
Simon

Vâng, làm thế nào bạn sẽ làm điều đó để bạn có thể nhìn thấy nó trong khi nó đang ở trên màn hình của bạn?
karl-cảnh sát

3

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

0

Kịch bản lệnh này sẽ thực thi ls và ghi nhật ký đầu ra của nó vào một tệp có tên log.txt:

exec >log.txt 2>&1
ls

Nhật ký sẽ không được thực thi.


1
Lưu ý rằng điều này giả định Unix / Linux, nhưng tôi đoán là OP nói về Windows. Nó cũng không chạy tập lệnh, nhưng ghi nhật ký đầu ra của các lệnh bạn nhập và bỏ qua thông tin quan trọng về cách ngăn chặn sự điên rồ ...
Sven

Tôi thực sự đang nói về Windows. Dù vậy cũng xin cảm ơn :)
Dempsey FoxDie Van Assche
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.