【问题标题】:Non-standard file descriptor in a batch script批处理脚本中的非标准文件描述符
【发布时间】:2016-11-15 08:31:59
【问题描述】:

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

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

基本上,你打开一个命令提示符,在相应的目录中输入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 的一部分,它是什么的一部分?甚至有可能知道它是什么的一部分吗?

提前致谢。

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

【问题讨论】:

    标签: windows batch-file stdout stderr


    【解决方案1】:

    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 文件,它不能正常工作/做你期望的,你应该修复它。

    【讨论】:

    • 我当然没有想到这一点。感谢您的澄清!
    • 很好地诊断了问题。但解决方法很简单:echo run test_script.txt | ethutil >nul,或type test_script.txt | ethutil >nul
    猜你喜欢
    • 2020-05-05
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多