1

我正在尝试将 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

它工作正常。我怎样才能将它组合成一个语句?

4

2 回答 2

1

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

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

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

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

于 2013-02-25T12:22:31.450 回答
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
于 2013-02-25T11:36:35.650 回答