2014-04-29 53 views
2

我注意到一些奇怪的行爲,重定向標準輸出到'名稱'中的特殊字符的文件。奇怪的標準輸出重定向行爲

的那些我發現:

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的零字節文件。

在批處理中,後一個例子會產生空文件與奇怪名稱相同的結果,但前一個例子生成一個名爲f的文件,其中包含一個空行。

任何解釋/'異常'添加?

+1

第一個很簡單,逗號被視爲終止符,結束文件名。改用'echo。>「f,test」'代替。我無法將其他情況重現爲書面形式,但請注意,'file:test'是[備用數據流]的有效路徑名(http://msdn.microsoft.com/zh-cn/library/windows/desktop /aa364404%28v=vs.85%29.aspx)在名爲'file'的文件中命名爲'test'。 –

+0

在我的系統上,第二種情況只是生成「系統找不到指定的路徑」。這是預期的,因爲我沒有F驅動器。 –

+0

第三種情況對我來說按預期工作,即它產生一個名爲'test.'的空文件,並帶有一個備用數據流。你在什麼操作系統上? –

回答

3

, ; = <space> <tab>是標準分隔符,所以echo.>f,testecho. ,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.To的狀態看,你可以使用更多的命令廣告內容:

more<test.:test

這裏是我知道的命令可以閱讀ADS:FOR /F , FIND , FINDSTR ,MORE , CERTUTIL ,CLIP ,EXPAND , SORT , MOFCOMP , FTP -S , CSCRIPT , WSCRIPT

記事本和寫字板將刪除ADS,如果他們打開一個文件。

+1

如果'echo。> f,test'與echo相同。 f> test',那麼爲什麼我會得到一個名爲'f'的文件,其中包含文本',test'?我正在使用NTFS。 '/ s'顯示所有的子目錄,那你的意思是? – unclemeat

+0

@unclemeat是的,你是對的。改變答案。並且數據流的開關是'/r'。請檢查dir幫助。此刻我使用XP,因此我的dir幫助不完整。 – npocmaka

+1

你是不是指'dir/R'? – unclemeat