我正在使用命令行脚本来调整计算机上的多个设置。但是,我希望将整个输出也记录到.txt或.log文件中。
当我使用日志系统的基本知识时,它将把输出放在一个文件中,但实际上不执行它。就我而言,我需要执行它,然后登录到文件中以供以后参考。
有人可以告诉我该怎么做吗?
提前致谢!登普西
我正在使用命令行脚本来调整计算机上的多个设置。但是,我希望将整个输出也记录到.txt或.log文件中。
当我使用日志系统的基本知识时,它将把输出放在一个文件中,但实际上不执行它。就我而言,我需要执行它,然后登录到文件中以供以后参考。
有人可以告诉我该怎么做吗?
提前致谢!登普西
Answers:
如果问题要求脚本“执行”并且整个批处理文件输出到Windows 8.1中的日志文件,那么这里是简单的答案:
在批处理文件的开头添加此内容...
@echo off
set LOGFILE=batch.log
call :LOG > %LOGFILE%
exit /B
:LOG
[ your script goes here ]
在您的问题中,您提到:
“ ...它将把输出放在一个文件中,但实际上不执行它。就我而言,我需要将其执行然后登录到文件中以供以后参考。”
既然您说程序正在运行并且其输出正在放入文件中,所以我认为您的意思可能是“ displayed”而不是“ executed”。
如果这不是您的意思,那么如果对它进行更好的解释(也许提供一些示例输出),可能会有所帮助。
无论如何,我会发布此答案,以防其他人认为此问题/答案有帮助。
因此,基本上,这听起来像是希望将脚本的输出捕获到文件中,并且还希望在脚本运行时在屏幕上看到脚本的输出。
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>&1”中的“ 2”指示:
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
在unix中,有一个标准命令: "tee"
使用“ tee”命令,您可以捕获程序的输出,也可以同时将输出显示在屏幕上。
Windows并不标配“ tee”命令,但是您可以在Windows上下载免费版本的“ tee”:
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
该脚本将执行ls并将其输出记录到名为log.txt的文件中:
exec >log.txt 2>&1
ls
该日志将不会执行。