¿BUG? 无法通过命令行 ECHO 和 COPY CON 创建带有“=”的文件

¿BUG? 无法通过命令行 ECHO 和 COPY CON 创建带有“=”的文件

哪里有文档可以解释这种明显异常的行为等号以下?

重现步骤(在命令提示符下):

以 ECHO 为例:

H:\BUGS>echo abc > a-b.txt
H:\BUGS>echo cde > c=d.txt
H:\BUGS>dir
2016-03-13  19:54  6 a-b.txt
2016-03-13  19:54 12 c
H:\BUGS>type a-b.txt
abc
H:\BUGS>type c
cde =d.txt

笔记:
文件C

636465203D642E7478740D0A    
c d e   = d . t x t    

文件ab.txt

616263200D0A    
a b c     

但是(如果我使用引号,此处的“=”将成为有效文件名的一部分):

H:\BUGS>ren a-b.txt a=b.txt
The syntax of the command is incorrect.

H:\BUGS>ren a-b.txt "a=b.txt"
H:\BUGS>ren c       "c=d.txt"
H:\BUGS>dir
2016-03-13  19:54   6 a=b.txt
2016-03-13  19:54  12 c=d.txt

一个等号是有效的文件名字符。

值得一提的是,在 DOS 命令行中,不在引号中的“=”似乎具有奇怪的特殊含义。

另一方面,'=' 是有效的文件名字符。

命名文件、路径和命名空间

使用 Windows 8.1

编辑:

H:\BUGS>echo def > "d=e.txt"
H:\BUGS>dir
2016-03-13  20:36 6 d=e.txt
H:\BUGS>type "d=e.txt"
def

上述语法有效。

结束编辑。

编辑#2:

迈克尔·弗兰克帮助我找到更多信息。

他的信息帮助我找到了一篇有趣的 SO 文章“cmd- 逗号分隔参数与空格相比?

H:\BUGS>type Frank.cmd
@echo %1/%2/%3

H:\BUGS>Frank 1 2 3
1/2/3

H:\BUGS>Frank 1=2=3
1/2/3

H:\BUGS>Frank 1;2;3
1/2/3

H:\BUGS>Frank 1,2,3
1/2/3

H:\BUGS>Frank 1/2/3
1/2/3//

在上文中,各种字符被用作分隔符。

/用作上面的分隔符时,/会发出一个额外的值;在我看来这将是一个错误。

在 ”cmd- 逗号分隔参数与空格相比?“,蒂姆·罗宾逊写道“在 Windows 上,程序负责解析自己的命令行。shell 解析重定向和管道,然后将命令行的其余部分以一个字符串的形式传递给程序

底线:看起来,在需要分隔符的地方,=它充当了分隔符;在某些情况下=会导致句法错误,在其他情况下=只是一个等号

结束编辑#2。

答案1

字符=是分隔符,功能上似乎与空格相同。如下例所示:

c:\NotBackedUp>echo abc>d efg.txt

c:\NotBackedUp>type d
abc efg.txt

同样,=也会做同样的事情:

c:\NotBackedUp>echo abc>d=efg.txt

c:\NotBackedUp>type d
abc=efg.txt

让我们看一下您的第一个命令:echo cde > c=d.txt

首先,您调用该命令,然后向其传递一个要插入到文件 中的echo值。由于是分隔符,并且您尚未告知将下一个字符串发送到何处,因此它默认为上一个文件:。cdec=echod.txtc

您可以通过引用输出名称来解决这个问题:

c:\NotBackedUp>echo abc>"d=e.txt"

或者通过使用以下方式转义分隔符^

c:\NotBackedUp>echo abc>d^=e.txt

这两者都将创建一个d=e.txt包含内容的文件abc

有关分隔符的更多信息

相关内容