今天,我想测试文件名是否可以包含逗号,并在打开cmd
并尝试这三项测试时偶然发现其他内容:
echo a,b>a
这就像假设一样(将a,b
写入名为a
)的文件
echo a>a,b
是一样的!这里发生的事情在第三次测试时会更清楚:
echo a>file,b this is a test
这将创建一个名为file
的文件,其中包含a,b this is a test
。
现在,我遇到了三个问题:
a
和b
的文件。cmd
特定的Windows扩展程序,还是因为旧的DOS时间已经这样了?答案 0 :(得分:3)
这是预期的行为,因为,;=<space><tab>
是参数的分隔符
如果您将代码放入没有echo OFF
的批处理文件中,您将看到
test.bat的
echo a,b>a
echo a>a,b
echo a>file,b this is a test
输出
C:\temp>test.bat
C:\temp>echo a,b 1>a
C:\temp>echo a,b 1>a
C:\temp>echo a,b this is a test 1>file
重定向后,只有下一个令牌是相关的,其余的是正常行内容的一部分 这是不重要的,其中redirction发生在一条线上 但是规则是,当同一个流存在多个重定向时,最后一个将获胜。
> file.txt echo hello> nul world > con
将在控制台上显示hello world
。
顺便说一下。通过插入符号(多线)重定向和线条仍然存在一种模糊的行为。
echo one two three^
four
结果:one two three four
但是 回显一个&gt; con三^ 4
结果:one two four
答案 1 :(得分:1)
逗号是批处理中的标准分隔符以及; <space> = <tab>
和evertything之后将逗号作为echo的其他参数,并且只有一个参数用于重定向。您可以尝试ecnlose {{1}在引号中这应该改变输出的行为并生成a,b文件。你也可以使用a,b
- ^
来转义分隔符
您也可以尝试echo a>a^,b
- 它将是相同的