【发布时间】:2014-06-14 21:04:25
【问题描述】:
我注意到在将标准输出重定向到“名称”中包含特殊字符的文件时出现了一些奇怪的行为。
我找到的那些:
echo.>f,test 生成一个名为f 的文件,其中包含文本,test。与.、; 和<space> 相同(显然逗号会更改为任何字符)。
echo.>f.:test 生成一个名为F~000%HK 的零字节文件。输出文件名中的第一个字符对应于重定向字符和.: 大写之间的重定向“文件名”(我相信. 被忽略/删除的原因与试图创建一个名为f.... 的文件相同创建一个名为f的文件)。我不知道其余的意思是什么,因为在“文件名”之后更改文本不会改变任何内容。即echo.>f.:nope 仍然产生空文件F~000%HK。
同一件事的另一个例子; echo.>test.:test 生成一个名为 TEST~4N5 的零字节文件。
在 Batch 中,后一个示例生成具有奇怪名称的空文件的相同结果,但前一个示例生成一个名为 f 的文件,其中包含一个空行。
要添加任何解释/“异常”吗?
【问题讨论】:
-
第一个很简单,逗号被当作结束符,结束文件名。请改用
echo.>"f,test"。我无法重现所写的其他情况,但请注意file:test是名为test的文件中名为test的alternate data stream 的有效路径名file。 -
在我的系统上,第二种情况只是生成“系统找不到指定的路径”。这是预期的,因为我没有 F 盘。
-
第三种情况对我来说按预期工作,即它生成一个名为
test.的空文件和一个备用数据流。你在什么操作系统上? -
你的意思是说
echo.>f.:test对于第二种情况? -
@HarryJohnston,是的,只是一个错字。
标签: windows file batch-file cmd ntfs