我正在尝试将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
它工作正常。我如何将其合并为一个陈述?
答案 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