将stdout和stderr重定向到一个语句中的同一个文件(批处理)

时间:2013-02-25 11:19:15

标签: batch-file

我正在尝试将stdout和stderr重定向到执行以下操作的同一文件:

dir c:\*.mp3 c:\*.mpa c:\*.asf c:\*.avi c:\*.flv c:\*.mov c:\*.mp4 c:\*.mpg c:\*.swf c:\*.vob c:\*.wmv /s/b > out.file.nlm.txt 2>&1

这不起作用 - 我没有在文件中找到“找不到文件”错误 - 但是当我将其分解为多个语句时:

dir c:\*.mp3 /s/b> out.file.nlm.txt 2>&1
dir c:\*.mpa /s/b >> out.file.nlm.txt 2>&1
dir c:\*.asf /s/b >> out.file.nlm.txt 2>&1

它工作正常。我如何将其合并为一个陈述?

2 个答案:

答案 0 :(得分:1)

您没有使用原始语句捕获“找不到文件”,因为它不存在: - )

DIR命令默认单独列出每个文件掩码的结果,但只有在没有找到任何掩码的文件时才会出现“找不到文件”消息。

如果您应用排序/ON选项,则更直观,并且多个扩展程序会混合在一起。很明显,最终错误状态和错误消息适用于累积结果。

如果您需要一条消息,指出哪些扩展名不存在,那么将其分解为多个DIR命令,就像您所做的那样。 Andriy展示了如何将命令括在括号中,因此您只需要重定向一次。

答案 1 :(得分:0)

您可以将dir命令括在括号内的块中,并将重定向应用于整个块:

(
dir c:\*.mp3 /s/b
dir c:\*.mpa /s/b
dir c:\*.asf /s/b
) > out.file.nlm.txt 2>&1

在命令提示符下,您可以将命令放在用& s分隔它们的同一行上:

(dir c:\*.mp3 /s/b & dir c:\*.mpa /s/b & dir c:\*.asf /s/b) >out.file.nlm.txt 2>&1