2013-08-07 62 views
1

我使用這個命令:PowerShell的輸出格式不正確的文件名

Get-ChildItem | Foreach-Object {$_.BaseName} > file_names.txt 

打印在我的當前目錄中的文件名文件(沒有最終擴展)。在記事本中打開文件名顯示正確打印的文件名。很簡單,是的。涼。

我的問題是,在用Java中的BufferedReader讀取文件名時,文件名會變得格格不入。例如,

20100916_090350_S1_1_auto獲得test_1.Rad出來作爲

ÿþ20 1 0 0 9 1 6 _ S 1 _ 1 _ U字噸Ôg的I N T E式T _ 1。 R A d

(在.Rad擴展應該在那裏,有後,另一部分,我想刪除)

我認爲這是某種類型的編碼問題愚蠢的窗口。不幸的是,我對這些事情一無所知。任何幫助,將不勝感激。

感謝

回答

4

PowerShell的默認發出unicode的,你看到的字符開頭被稱爲BOM(字節順序標記)。您可以強制Java讀取Unicode,也可以強制Powershell輸出其他編碼,最好在Out-File(參數-Encoding)的幫助下輸入defaultOEM。所以總結試試這個:

Get-ChildItem | ForEach-Object {$_.BaseName} | Out-File -Encoding default file_names.txt 
+0

真棒,它的工作!所以我發現前段時間需要擺脫物料清單,但最後一個半小時沒有做到這一點。我沒有指定任何編碼,所以我認爲它使用的是默認值。爲什麼告訴它使用默認的編碼,當它沒有這樣做之前呢? –

+0

那麼,'>'語法只是'|的語法糖。 Out-File「,根據[文檔](http://technet.microsoft.com/en-us/library/hh849882.aspx),Out-File的默認編碼是Unicode。例如,在波蘭語中,「默認」是代碼頁1250,「OEM」是舊DOS代碼頁852.我不建議深入研究OEM/ANSI編碼的怪癖,只是嘗試使用Unicode或UTF-8儘可能提供與現代國際意識環境的兼容性。 – Endrju

+0

我明白,我感到困惑的是,我最初並未指定將其編碼爲什麼。這些文件最終編碼爲Big-Endian(不管那是什麼),所以我認爲這是默認的;這就是爲什麼我不打擾嘗試默認編碼。當我嘗試使用UTF-8編碼時,我只能使用BOM獲取編碼。我只是好奇它爲什麼沒有默認爲「默認」設置。另外,謝謝。 –

0

你可能想使用ASCII輸出。 使用這個:

Get-ChildItem | ForEach-Object {$_.BaseName} | Out-File -Encoding ASCII -FilePath file_names.txt