我有一个批处理文件,可以将一些文件从不同的网络共享驱动器复制到我自己的计算机上。
我已设置了一个日志文件以记录是否随时发生任何错误,但无法在发生错误的错误日志中指定特定驱动器的名称。
我的批处理代码:
@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。
答案 0 :(得分:0)
最简单的解决方案是将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
并附加。