บันทึกเอาต์พุตไฟล์แบตช์ทั้งหมด


12

ฉันใช้สคริปต์บรรทัดคำสั่งเพื่อปรับการตั้งค่าหลายรายการบนคอมพิวเตอร์ อย่างไรก็ตามฉันต้องการให้เอาท์พุททั้งหมดเข้าสู่ไฟล์. txt หรือ. log ด้วย

เมื่อฉันใช้ความรู้พื้นฐานเกี่ยวกับระบบการบันทึกข้อมูลของฉันมันจะใส่เอาท์พุทในไฟล์ แต่ไม่ได้รันจริง ในกรณีของฉันฉันจะต้องใช้มันแล้วลงชื่อเข้าใช้ไฟล์สำหรับการอ้างอิงในภายหลัง

ใครบางคนจะสามารถบอกฉันได้ว่าจะทำอย่างไร

ขอบคุณล่วงหน้า! ก้าว


คุณยังไม่ได้ระบุระบบปฏิบัติการ!
Michael Hampton

คำตอบ:


11

หากคำถามขอให้สคริปต์ "ประมวลผล" และไฟล์แบตช์ทั้งหมดจะถูกส่งออกไปยังไฟล์บันทึกใน Windows 8.1 นี่คือคำตอบง่ายๆ:

รวมสิ่งนี้ไว้ที่จุดเริ่มต้นของไฟล์แบตช์ของคุณ ...

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

:LOG
[ your script goes here ]

ยอดเยี่ยมขอบคุณ! (แน่นอนว่า% LOGFILE% ไม่ต้องการที่นี่จริงๆ: P)
แอนดรู

1
สคริปต์ของฉันโพสต์คำถาม - ฉันไม่เห็นถ้าใช้นี่ วิธีการบันทึกทุกอย่างและเห็นมันบนหน้าจอขณะดำเนินการ?
Simon

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

3

ในคำถามของคุณคุณพูดถึง:

"... มันจะใส่เอาท์พุทในไฟล์ แต่ไม่ได้รันจริง ๆ ในกรณีของฉันฉันต้องการมันที่จะถูกเอ็กซีคิ้วท์แล้วจึงบันทึกเป็นไฟล์สำหรับการอ้างอิงในภายหลัง"

ตั้งแต่ที่คุณพูดว่าโปรแกรมทำงานและผลลัพธ์ที่ได้จะถูกใส่ลงไปในแฟ้มผมคิดว่าคุณอาจมีความหมาย"ที่แสดง"แทนการ"ดำเนินการ"

ถ้านั่นไม่ใช่สิ่งที่คุณหมายถึงมันอาจจะช่วยได้ถ้าสิ่งนั้นได้รับการอธิบายที่ดีกว่าอาจมีตัวอย่างบางส่วน

ไม่ว่าในกรณีใดฉันกำลังโพสต์คำตอบนี้ในกรณีที่มีคนอื่นที่พบคำถาม / คำตอบนี้มีประโยชน์

ดังนั้นโดยทั่วไปดูเหมือนว่าคุณต้องการให้เอาต์พุตของสคริปต์ถูกจับไปยังไฟล์และเพื่อให้สามารถดูผลลัพธ์ของสคริปต์บนหน้าจอในขณะที่สคริปต์กำลังทำงานอยู่

(tl; dr version: use winteeเช่นนี้:

script 2>&1 | wtee logfile.txt)


สำหรับโพสต์นี้ฉันจะใช้ไฟล์ชุดทดสอบขนาดเล็ก แต่สคริปต์ของคุณอาจใหญ่และซับซ้อนหรือง่ายเท่าที่คุณต้องการ:

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.


นี่คือสิ่งที่เกิดขึ้นเมื่อฉันเรียกใช้สคริปต์ชุดงานนี้:

C:\>a.cmd
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

โปรดสังเกตว่าในสคริปต์ทดสอบการเรียกใช้งานครั้งแรกของคำสั่ง "dir" สำเร็จและชุดที่สองล้มเหลว ฉันทำเช่นนี้เพียงเพื่อแสดงสิ่งที่จะเกิดขึ้นกับ "ข้อความผิดพลาด" เมื่อคุณเรียกใช้สคริปต์ของคุณ

ถ้าฉันเรียกใช้สคริปต์และใช้การเปลี่ยนเส้นทาง ( ">" ) เพื่อจับเอาท์พุทฉันจะเห็นสิ่งนี้

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:\>

สังเกตว่าข้อความแสดงข้อผิดพลาด "ไม่พบไฟล์" ปรากฏขึ้นบนหน้าจอเมื่อสคริปต์ทำงานและไม่ถูกบันทึกลงในไฟล์ นั่นเป็นเพราะ">"จับ "เอาต์พุตปกติ" ซึ่งถูกส่งไปยังสตรีม STDOUT "ข้อความผิดพลาด" จะถูกส่งไปยังสตรีม STDERR

ในการจับภาพ "เอาท์พุทปกติ" และ "ข้อความผิดพลาด" คุณต้องจับสตรีม STDERR ซึ่งระบุด้วย"2"ใน"2> & 1"ในคำสั่งที่นี่:

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

ในยูนิกซ์มีคำสั่งมาตรฐาน: "tee"

ใช้คำสั่ง "tee" คุณสามารถจับภาพเอาต์พุตจากโปรแกรมและแสดงผลลัพธ์ไปยังหน้าจอในเวลาเดียวกัน

คำสั่ง "ที" ไม่ได้มาตรฐานที่มีหน้าต่าง แต่คุณสามารถดาวน์โหลดรุ่นฟรีของ "ที" สำหรับ Windows ที่นี่: wintee "wtee.exe"โปรแกรมดาวน์โหลดเป็นชื่อ:

คุณใช้โปรแกรม "wtee.exe" ดังที่แสดงด้านล่าง

สิ่งนี้จะดักจับเอาต์พุตสคริปต์ไปยังไฟล์ที่มีชื่อ"log.txt"เหมือนก่อนหน้านี้และจะแสดงเอาต์พุตไปยังหน้าจอในขณะที่สคริปต์กำลังทำงาน:

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

สคริปต์นี้จะเรียกใช้ ls และบันทึกผลลัพธ์ไปยังไฟล์ชื่อ log.txt:

exec >log.txt 2>&1
ls

บันทึกจะไม่ถูกดำเนินการ


1
โปรดทราบว่านี่ถือว่า Unix / Linux แต่ฉันเดาว่า OP พูดถึง Windows นอกจากนี้ยังไม่ได้ทำงานสคริปต์ แต่การเข้าสู่ระบบการส่งออกของคำสั่งที่คุณป้อนและละเว้นข้อมูลที่สำคัญของวิธีการที่จะหยุดความบ้า ...
สเวน

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