如何在错误日志文件中重定向成功命令的输出?

时间:2019-05-14 14:07:23

标签: batch-file

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

我已设置了一个日志文件以记录是否随时发生任何错误,但无法在发生错误的错误日志中指定特定驱动器的名称。

我的批处理代码:

@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。

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是将call :log >>%logfile% 2>&1STDOUT都写入日志文件。但是看来,您不想登录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并附加。