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

Non-standard file descriptor in a batch script

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

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

基本上,你打开一个命令提示符,在适当的目录中输入ethutil,然后它通过JTAG访问芯片。

在此实用程序中,您可以 运行 "scripts" 这只是填充了适当命令的文本文件。他们是这样的运行:

-->run test_script.txt

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

我已经通过使用批处理文件将命令管道化到实用程序来实现大量寄存器的自动化 writes/reads,如下所示:

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.

有关

type 不是 echo.

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

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

错误来自 "type" 的标准错误,因此重定向 ethutil 的标准错误不会抑制它。如果你真的想要,你可以 type run 2>nul | ethutil 但由于没有 run 文件,它无法正常工作 properly/doing 你应该修复它。