首页 > 解决方案 > 如何在错误日志文件中重定向成功命令的输出?

问题描述

我有一个批处理文件,可以将一些文件从不同的网络共享驱动器复制到我自己的计算机上。

如果在任何时候发生任何错误,我已经设置了一个用于记录的日志文件,但无法在发生错误的错误日志中指定特定驱动器的名称。

我的批处理代码:

@ECHO OFF
set LOGFILE=Backup.log
call :L 2>> %LOGFILE%
EXIT /B

:LOG
***echo --------Drive "c03f"--------- >> Backup.log*** --to print network drive's name in the log file. Please ignore the star mark and the double quotes--
net use p: \\10.210.162.171\Packages && copy p:\run.log d:\Files
:LOG
echo --------Drive "c04f"--------- >> Backup.log
net use p: \\10.210.162.192\Packages && copy p:\run.log d:\Files
:LOG
echo --------Drive "c05f"--------- >> Backup.log
net use p: \\10.210.162.196\Packages && copy p:\run.log d:\Files

错误日志文件中的预期结果:

--------Drive c03f---------
network name not valid
Cannot connect to the system.
--------Drive c04f---------
network name not valid
Cannot connect to the system.
--------Drive c05f---------
1 File(s) copied

错误日志文件中的当前结果:-

network name not valid
Cannot connect to the system.
network name not valid
Cannot connect to the system.
1 File(s) copied

这就是我正在做的事情,在 `:LOG.

它没有按照我想要的方式提供网络共享驱动器名称。由于共有三个驱动器,并且每个驱动器都有相同的命令集,因此我无法推断发生此错误的网络共享驱动器。

共有三个相同的语句,具有不同的驱动器名称和不同的 IP。我在 Windows 10 中执行此操作。所有其他网络连接的 PC 也是 Windows 10。

标签: batch-file

解决方案


最简单的解决方案是call :log >>%logfile% 2>&1同时写入STDOUT和写入STDERR日志文件。但似乎,您不想登录STDOUT. 因此,您的选择是将您的echo命令重定向到STDERR子例程中:

@ECHO OFF
set LOGFILE=Backup.log
call :L 2>> %LOGFILE%
EXIT /B

:LOG
echo --------Drive "c03f"--------- 1>&2
net use p: \\10.210.162.171\Packages && type p:\run.log >> d:\Files\run.log 
echo --------Drive "c04f"--------- 1>&2
net use p: \\10.210.162.192\Packages && type p:\run.log >> d:\Files\run.log
echo --------Drive "c05f"---------1>&2
net use p: \\10.210.162.196\Packages && type p:\run.log >> d:\Files\run.log

我更改了您的copy命令以type避免覆盖run.log并改为附加。


推荐阅读