2015-10-12 106 views
2

这应该是简单的不知道为什么它不工作... 我有一个2 cmds的批处理文件,并试图让它将输出写入日志文件。批处理文件创建一个日志文件

这里是什么在我的批处理文件:

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

+0

@Mofi完美谢谢!我特别感谢您注意一个详细而简洁的答案。我相信我已经为您提供了正确答案的功劳。再次,非常好的帮助,谢谢! – AdrianBoeh

回答

2

你可以使用下面的批号重定向标准输出标准错误到一个日志文件。

@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文章Using command redirection operators

>>logfile.txt每隔文本输出附加到标准输出(标准输出)的文件重定向标准输出到日志文件中。日志文件只有在不存在的情况下才会被创建。

2>&1重定向stderr的(标准误差),以标准输出得到最终标准消息 - 由所使用的命令到日志文件以及错误消息输出 - 与echo命令行。

相关问题