CMD或BATCH BNF语法或解析器引用

时间:2017-01-09 20:09:48

标签: batch-file cmd

我正在查看由同事写的一些批处理文件,我遇到了一些奇怪的语法,他在命令开头调用了重定向操作符。

此:

> output.txt ECHO something like this

而不是:

ECHO something like this > output.txt
它把我扔了一秒钟。它有效,所以我认为它是有效的。我去找官方参考确认,但找不到。

我确实找到了this reference关于运营商本身的使用情况。

我找到了this我正在寻找的bash版本链接到这里:POSIX sh EBNF grammar

使用>的正确语法是什么?和>>批量运营商?

编辑: 为了澄清,我不是在寻找文档的例子。我想看一些文档,解释如何针对重定向操作符专门解析cmd.exe命令和.bat文件。

1 个答案:

答案 0 :(得分:4)

命令重定向运算符的official documentation演示了它们在行尾的用法。但是将重定向放在行的开头也是正确的(尽管有管道输出)。

将重定向放在echo行的开头的好处是可以避免将尾随空格回显到文件中。

echo Hello world! > out.txt
  

15个字节,包括一个尾随空格。

> out.txt echo Hello world!
  

14个字节,不包括尾随空格

您也可以使用括号来避开尾随空格。

(echo Hello world!) > out.txt
  

14个字节

括号也可用于对几个命令的输出进行分组,而无需关闭并重新打开每一行的文件句柄。

rem // option 1
> out.txt (
    echo Hello world!
    echo Another line
)

rem // option 2
(
    echo Hello world!
    echo Another line
) > out.txt

这两个括号内的代码块执行完全相同的操作。两者都比这更有效:

rem // option 3
>out.txt echo Hello world!
>>out.txt echo Another line

上面选项1和2中的括号示例只打开,写入和关闭“out.txt”一次;而选项3示例打开,写入,关闭,打开以进行追加,写入和关闭。将大量数据转储到文本文件时,这种优化可能会产生影响。