Batch file 在一条语句中将stdout和stderr重定向到同一文件(批处理)

Batch file 在一条语句中将stdout和stderr重定向到同一文件(批处理),batch-file,Batch File,我正在尝试将stdout和stderr重定向到同一个文件,并执行以下操作: dirc:\*.mp3 c:\*.mpc:\*.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>

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

dirc:\*.mp3 c:\*.mpc:\*.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

它很好用。如何将其合并为一条语句?

您可以将
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

可以将
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
您没有使用原始语句捕获“未找到文件”,因为它不存在:-)

默认情况下,DIR命令分别列出每个文件掩码的结果,但只有在未找到任何掩码的文件时,才会出现“file Not Found”消息

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

如果您需要一条消息来指示哪些扩展不存在,那么将其分解为多个DIR命令(正如您所做的那样)是一种方法。Andrey演示了如何将命令括在括号中,以便只需重定向一次。

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

默认情况下,DIR命令分别列出每个文件掩码的结果,但只有在未找到任何掩码的文件时,才会出现“file Not Found”消息

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

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