哪里有文档可以解释这种明显异常的行为等号以下?
重现步骤(在命令提示符下):
以 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
值。由于是分隔符,并且您尚未告知将下一个字符串发送到何处,因此它默认为上一个文件:。cde
c
=
echo
d.txt
c
您可以通过引用输出名称来解决这个问题:
c:\NotBackedUp>echo abc>"d=e.txt"
或者通过使用以下方式转义分隔符^
:
c:\NotBackedUp>echo abc>d^=e.txt
这两者都将创建一个d=e.txt
包含内容的文件abc
。