我注意到在将stdout重定向到名称为'的特殊字符的文件时出现了一些奇怪的行为。
我发现的那些:
echo.>f,test
生成一个名为f
的文件,其中包含文字,test
。与.
,;
和<space>
相同(显然,逗号会更改为任何字符)。
echo.>f.:test
生成一个名为F~000%HK
的零字节文件。输出文件名中的第一个字符对应于重定向&#39;文件名&#39;在重定向字符和.:
大写之间(我相信.
被忽略/删除,原因与尝试创建名为f....
的文件的原因相同,只创建一个名为f
的文件。我不知道其余的意思是什么,因为在文件名后更改文字&#39;一无所获。即echo.>f.:nope
仍然生成空文件F~000%HK
。
同一件事的另一个例子; echo.>test.:test
生成一个名为TEST~4N5
的零字节文件。
在批处理中,后一个示例产生了具有奇怪名称的空文件的相同结果,但前一个示例生成了一个名为f
的文件,其中包含一个空行。
任何解释/&#39;异常&#39;添加?
答案 0 :(得分:3)
, ; = <space> <tab>
是标准分隔符,因此echo.>f,test
与echo. ,test>f
相同。您可以在打开echo
的批处理批处理文件中查看此案例中的实际情况。(在重定向之前只设置echo on
)。重定向语法可能很棘手,因为文件只需要第一个参数,并且prio高于命令。您可以使用echo. >"f,test"
至于echo.>test.:test
- 您正在重定向到Alternate data streams(您使用的是FAT32还是NTFS.FAT32不支持ADS,结果可能会产生不同的结果)?使用dir /r
(r开关可从vista及以上版本获得)或streams.exe from sysinternals,您可以检查ADS的状态。要查看ADS内容,您可以使用更多命令:
more<test.:test
以下是我知道的可以读取ADS的命令:FOR /F , FIND , FINDSTR ,MORE , CERTUTIL ,CLIP ,EXPAND , SORT , MOFCOMP , FTP -S , CSCRIPT , WSCRIPT
记事本和写字板会在打开包含ADS的文件时删除ADS。