批处理文件创建日志文件

3
这应该很简单,不确定为什么它不起作用...我有一个包含2个命令的批处理文件,并尝试将其输出写入日志文件。
以下是我的批处理文件内容:
PUSHD "\\My Very Long\Exact Directory\" >>logfile.txt
for /f "skip=7 eol=: delims=" %%F in ('dir /b /o-d *.xlsm') do del "%%F" >>logfile.txt

PUSHD是因为此文件位于远程文件存储\\My Very Long\Exact Directory\中,我希望在批处理文件所在的目录中执行操作,而不是从中调用的目录。第二个命令通过删除旧副本来清理目录。
当我运行批处理时,无论是从远程服务器调用它还是直接双击它,cmd窗口都会打开并运行清理。它将在目录中创建一个名为“logfile.txt”的文件,但该文件为空。
从远程服务器调用此批处理文件的进程是预定的,我想在稍后调用时查看发生了什么。如何将结果写入日志文件。我想它应该看起来非常相似(如果不是相同的)于cmd窗口弹出并显示的内容。
我参考了这篇文章:Redirecting Output from within Batch file
由于PUSHD和DEL没有输出,我在文件中加了一个暂停以捕获cmd窗口。我要捕获此信息以及当然发生的任何错误。也许这是错误的方法?
X:\File Path\BackUps>PUSHD "\\My Very Long\Exact Directory\"  1>>logfile.txt
Y:\File Path\BackUps>for /F "skip=7 eol=: delims=" %F in ('dir /b /o-d *.xlsm') do del "%F"  1>>logfile.txt
Y:\File Path\BackUps>del "2015 CSLD Weekly Comment Analysis 2015-10-10  9_11_09 .xlsm"  1>>logfile.txt
Y:\File Path\BackUps>del "2015 CSLD Weekly Comment Analysis 2015-10-10 23_55_29 .xlsm"  1>>logfile.txt
Y:\File Path\BackUps>pause
Press any key to continue . . .

3
您的日志文件为空,因为无论是“pushd”还是“del”都不会在屏幕上输出任何信息。只有显示在屏幕上的内容才能在使用“>”和“>>”时发送到文件中。 - SomethingDark
@Mofi非常感谢!我特别欣赏您对详细而简洁的回答所付出的努力。我相信我已经为您提供了正确答案的信用。再次感谢您的帮助! - AdrianBoeh
1个回答

2
您可以使用以下批处理代码将 stdoutstderr 重定向到日志文件。
@echo off
>>logfile.txt 2>&1 (
    echo INFO: Making "\\My Very Long\Exact Directory\" the working directory ...
    PUSHD "\\My Very Long\Exact Directory\"
    echo INFO: Deleting old *.xlsm files in this directory ...
    for /f "skip=7 eol=: delims=" %%F in ('dir /b /o-d *.xlsm') do (
        echo INFO: Deleting file "%%F" ...
        del "%%F"
    )
)

请参阅 Microsoft TechNet 文章 使用命令重定向运算符>> logfile.txtstdout 重定向到一个日志文件,每次输出文本到 stdout(标准输出)时都将其附加到文件中。如果该日志文件不存在,则会创建一个新文件。 2>&1stderr(标准错误)重定向到 stdout,以最终获取标准消息(使用 echo 命令的行)以及由使用的命令输出的错误消息到日志文件中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接