使用Windows Server 2008,如何捕获使用Windows任务计划程序运行的脚本的输出?
我正在测试一个相当长的自定义打印批处理脚本,出于调试目的,我希望每晚都能看到它的所有输出。
答案 0 :(得分:68)
尝试将此作为任务计划程序中的命令字符串:
cmd /c yourscript.cmd > logall.txt
答案 1 :(得分:46)
使用stderr(大多数错误发生的地方):
cmd /c yourscript.cmd > logall.txt 2>&1
答案 2 :(得分:37)
您可以使用调用yourscript.cmd
的debug.cmdyourscript.cmd > logall.txt
你安排debug.cmd而不是yourscript.cmd
答案 3 :(得分:36)
要补充@ user2744787的答案,这是一个屏幕截图,显示如何在计划任务中使用var counttopercentagec1event = [0, 1, 2, 3, 4, 5];
var counttopercentagec2event = [2, 33, 22, 32, 43, 52];
var counttopercentagec3event = [7, 17, 72, 37, 47, 51];
function wconclusiontable() {
var wtable = document.getElementById("wconclusiontable");
var row;
row += "<thead><tr><th>" + "Event #" + "</th>";
row += "<th>" + "Low" + "</th>";
row += "<th>" + "Medium" + "</th>";
row += "<th>" + "High" + "</th>";
row += "</tr></thead>";
for (var i = 2; i < 5; i++) {
row += "<tbody><tr><td>" + (i-1) + "</td>";
row += "<td>" + counttopercentagec1event[i-1] + "%" + "</td>";
row += "<td>" + counttopercentagec2event[i-1] + "%" + "</td>";
row += "<td>" + counttopercentagec3event[i-1] + "%" + "</td>";
row += "</tr></tbody>";
}
wtable.innerHTML = row;
}
wconclusiontable();
参数:
答案 4 :(得分:33)
>>
将附加日志文件,而不是每次都覆盖它。 2>&1
也会向您的日志文件发送错误。
cmd /c YourProgram.exe >> log.txt 2>&1
答案 5 :(得分:8)
cmd.exe
命令处理器构建带时间戳的文件名以记录计划任务的输出要在此处建立其他人的答案,可能是您要创建一个输出文件,该文件的日期和/或时间嵌入在文件名中。您可以使用cmd.exe
命令处理器为您执行此操作。
注意:此技术获取内部Windows环境变量的字符串输出,并根据字符位置对其进行切片。因此,下面示例中提供的确切值可能不适用于您使用的Windows区域。此外,对于某些区域设置,日期或时间的某些组件可能会在其值小于10时在构造的文件名中引入空格。要缓解此问题,请使用引号括住文件名,以便文件中的任何非预期空格name不会破坏您正在构建的命令行。尝试并找到最适合您情况的方法。
请注意PowerShell
比cmd.exe
更强大。它更强大的一种方式是它可以处理不同的Windows区域。但是这个答案是关于使用cmd.exe
解决此问题,而不是PowerShell
,所以我们继续。
使用cmd.exe
您可以通过切片内部环境变量%date%
和%time%
来访问日期和时间的不同组件,如下所示(同样,确切的切片值取决于在Windows中配置的区域:
%date:~10,4%
%date:~4,2%
%date:~7,2%
%time:~0,2%
%time:~3,2%
%time:~6,2%
假设您希望使用此日期/时间格式命名日志文件:“Log_[yyyyMMdd]_[hhmmss].txt
”。您将使用以下内容:
Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
要对此进行测试,请运行以下命令行:
cmd.exe /c echo "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt"
总而言之,要将stdout
和stderr
从脚本重定向到以当前日期和时间命名的日志文件,请使用以下命令行:
cmd /c YourProgram.cmd > "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt" 2>&1
请注意,在文件名周围使用引号来处理实例时,日期或时间组件可能会引入空格字符。
就我而言,如果当前日期/时间是10/05/2017 9:05:34 AM,则上述命令行将生成以下内容:
cmd /c YourProgram.cmd > "Log_20171005_ 90534.txt" 2>&1
答案 6 :(得分:7)
您可以在要输出的行上写入日志文件,如下所示:
@echo off
echo Debugging started >C:\logfile.txt
echo More stuff
echo Debugging stuff >>C:\logfile.txt
echo Hope this helps! >>C:\logfile.txt
这样,如果您不想浏览所有内容,可以选择要输出的命令,只需获取您需要查看的内容即可。 >
会将其输出到指定的文件(如果文件不存在则创建文件,如果存在则覆盖它)。 >>
将附加到指定的文件(如果该文件不存在则创建该文件,但如果存在,则附加到该文件)。
答案 7 :(得分:0)
示例如何运行程序并使用时间戳将stdout和stderr写入文件:
cmd /c ""C:\Program Files (x86)\program.exe" -param fooo >> "c:\dir space\Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt" 2>&1"
关键部分是在cmd /c
后面用双引号将所有部分引起来,并且在其中使用照常使用双引号。另外请注意,日期取决于语言环境,此示例使用美国语言环境。
答案 8 :(得分:0)
此代码段使用wmic.exe构建日期字符串。不受语言环境设置的干扰
rem DATE as YYYY-MM-DD via WMIC.EXE
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set datetime=%%I
set RDATE=%datetime:~0,4%-%datetime:~4,2%-%datetime:~6,2%