Batch file CMD或批处理BNF语法或解析器引用

Batch file CMD或批处理BNF语法或解析器引用,batch-file,cmd,Batch File,Cmd,我查看了一些同事编写的批处理文件,遇到了一些奇怪的语法,他在命令开始时调用重定向操作符 这: 而不是: ECHO something like this > output.txt 这让我有一秒钟不舒服。它是有效的,所以我认为它是有效的。我去寻找一个官方的参考资料来确认,但找不到 我确实发现了操作员本身的用法 我发现我正在寻找的bash版本链接到这里: 在批处理中使用>和>>运算符的正确语法是什么 编辑: 为了澄清这一点,我不想将示例作为文档。我想看一些文档,解释如何专门针对重定向操作符解

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

这:

而不是:

ECHO something like this > output.txt
这让我有一秒钟不舒服。它是有效的,所以我认为它是有效的。我去寻找一个官方的参考资料来确认,但找不到

我确实发现了操作员本身的用法

我发现我正在寻找的bash版本链接到这里:

在批处理中使用>和>>运算符的正确语法是什么

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

for命令重定向操作符在最后演示了它们的用法。但将重定向放在行的开头同样正确(尽管有管道输出)

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

echo Hello world!>顺序文件
15字节,包括尾随空格

>out.txt echo Hello world!
14字节,不包括尾随空格

也可以使用括号来避免尾随空格

(echo Hello world!)>out.txt
14字节

括号还可用于将多个命令的输出分组,而无需关闭和重新打开每行的文件句柄

rem//选项1
>out.txt(
回声你好世界!
回音
)
rem//选项2
(
回声你好世界!
回音
)>out.txt
这两个附加代码块执行完全相同的操作。两者都比这更有效:

rem//选项3
>out.txt回声你好,世界!
>>out.txt回显另一行

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

echo This is>file.txt也有效
可能重复@aschipfl该问题要求文档重定向,但行为的不同方面。他们的问题是,在同一个命令中有多个重定向操作符的情况下,它们之间的相对位置和顺序。这不仅关系到它们之间的相对顺序,还关系到它们在命令行中的绝对位置;请参阅…中的“关于职位”一节,我问了一个不同的问题,即使答案相同。它们显示了行开头使用的重定向操作符的示例。这并没有真正回答我的问题。我知道它是有效的,我只是在寻找一些有关cmd.exe解析器语法的文档。作为一个注释:我建议将重定向放在“逻辑”位置:开始时输入重定向,结束时输出重定向:
output.txt
真的吗?我经常做相反的事情,例如,
>output.txt set/P“=不带尾随CrLf的行”您的正式文档与我在问题中链接的内容相同。它定义了如何使用操作符,我理解这一点。我在寻找一些定义批处理命令语法的东西,以及在该命令中可以在何处使用运算符。@rojo:这完全是个人偏好问题,但当块由许多行组成时,输入命令通常放在开头,输出命令放在结尾。按照这种顺序,我发现更容易将读取命令“从”放在开头的文件,“写入”命令“匹配到”放在结尾的文件(就像一个“输入在开头,输出在结尾”的块)。@rojo:你的比萨饼评论让我想起了一个关于在更大的数据单元中用于字节排序的术语来源的故事,摘自乔纳森·斯威夫特(Jonathan Swift)的小说:《小人国》(kingdom of Lilliput)有一条法令,命令所有臣民在受到重罚后,在吃鸡蛋之前打碎鸡蛋的小头,因此他们被称为“小头人”(小头先)。这些叛徒被称为“大端人”(第一大部分),被流放到利利利浦特的敌人布莱福斯库王国避难。
ECHO something like this > output.txt