批处理脚本中的非标准文件描述符

时间:2016-07-12 22:49:28

标签: windows batch-file stdout stderr

所以我(我认为是)一个有趣的问题。

在工作中,我使用专有命令行实用程序测试/配置我们制作的以太网设备。

基本上,您打开命令提示符,在相应的目录中键入ethutil,然后通过JTAG访问芯片。

在此实用程序中,您可以运行“脚本”,这些脚本只是填充了相应命令的文本文件。它们是这样运行的:

-->run test_script.txt

然后,这会将反馈吐出到脚本中的所有命令。

我已经通过使用批处理文件将命令传递给实用程序来自动化大量的寄存器写入/读取,如下所示:

type run test_script.txt | ethutil >nul

nul只是为了压缩我的批量读数中的所有输出。这非常有效,但我总是收到一条错误消息,指出无法找到该文件:

The system cannot find the file specified.
Error occurred while processing: run.

test_script.txt

在继续之前,应该注意的是,如果我只是从实用程序本身运行脚本(即没有批处理脚本),则不会发生此错误。

现在我试图像这样压制错误:

type run test_script.txt | ethutil >nul 2>&1

但错误仍然显示,所以它显然不属于stderr

此外,如果我用日志文件替换nul,则错误不会显示在日志文件中。

所以我的问题是:有没有办法找出运行批处理脚本时出现此错误的原因?如果它不属于stderrstdout,它的一部分是什么?是否有可能知道它是什么?

提前致谢。

P.S。我知道这可能只是一个专有软件的怪癖,但我想我会问它是否与Windows有关。

1 个答案:

答案 0 :(得分:3)

type不是echo

c:\> type /?
displays the contents of a text file or text files

它抱怨因为run不是文本文件,并且(推测)可以读取test_script.txt,因为它是。

错误来自"类型"的stderr,因此重定向ethutil的stderr并不会压制它。如果您真的想要type run 2>nul | ethutil,但由于没有run文件,它无法正常工作/做您期望的事情,您应该修复它。