COPY 命令 - .BAT文件中 STDERR 重定向的意外结果



我正在尝试使用以下COPY命令和重定向STDERR句柄记录每个文件传输.BAT

Copy /Y FileExist01.txt NewFile01.txt 2>CopyError.log
Copy /Y NoFile02.txt NewFile02.txt 2>>CopyError.log
Copy /Y FileExist03.txt NewFile03.txt 2>>CopyError.log
Copy /Y NoFile04.txt NewFile04.txt 2>>CopyError.log
  • 我知道FileExist##.txt存在的文件(已验证的路径和
    文件名(
  • 我知道NoFile##.txt不存在的文件来测试 出错时STDERR重定向(2>>CopyError.log(

我希望在CopyError.log中看到2错误行以显示"The system cannot find the path specified."CopyError.log是空的。

不幸的是,Copy不会将该消息输出为StdErr

以前XCopy是作为替代方案提供的。有关更多信息,请参阅此问题,但这里有一个快速的想法:

(   Copy /Y "FileExist01.txt" "NewFile01.txt"
Copy /Y "NoFile02.txt" "NewFile02.txt"
Copy /Y "FileExist03.txt" "NewFile03.txt"
Copy /Y "NoFile04.txt" "NewFile04.txt"
)|FindStr /VRC:"^ ">"CopyError.log"

现在,与预期方法一样,这不会告诉您哪些命令实际输出消息。如果你想这样做,我想你可以输出行号:

(   Copy /Y "FileExist01.txt" "NewFile01.txt"
Copy /Y "NoFile02.txt" "NewFile02.txt"
Copy /Y "FileExist03.txt" "NewFile03.txt"
Copy /Y "NoFile04.txt" "NewFile04.txt"
)|FindStr /VRNC:"^ ">"CopyError.log"

在这里,错误应该在前面加上数字,在这种情况下:

2:The system cannot find the file specified.
4:The system cannot find the file specified.

您至少可以看到是您的2nd和4th复制命令失败了。

这是因为 copy 命令不会将该错误消息打印到 stderr。我知道,WTF!?

以下是一些快速测试供您确认这一点。从命令行尝试以下操作:

dir missing-file.txt

并观察

>dir missing-file.txt
Volume in drive C has no label.
Volume Serial Number is EC0D-D428
Directory of c:TEMP
File Not Found

接下来使用重定向并观察它是否有效,错误消息被放置在 elog.txt 文件中。

>dir missing-file.txt
Volume in drive C has no label.
Volume Serial Number is EC0D-D428
Directory of 
File Not Found
>dir missing-file.txt 2> elog.txt
Volume in drive C has no label.
Volume Serial Number is EC0D-D428
Directory of 

>type elog.txt
File Not Found

现在,重复上述操作,但这次是使用 copy,然后作为最后一个实验,重定向 stdout (1( 并观察消息被重定向。显示该副本会将其错误消息放在标准输出上。

>copy /y missing-file.txt n
The system cannot find the file specified.
>copy /y missing-file.txt n 2> elog.txt
The system cannot find the file specified.
>copy /y missing-file.txt n 1> elog.txt
>type elog.txt
The system cannot find the file specified.

相关内容

  • 没有找到相关文章

最新更新