2015-05-08 118 views
0

我有一個PS腳本將文件夾中所有文件的相對路徑複製到文本文件。
Powershell輸出重定向編碼問題

(gci -path Passion_Flower_positive_images -recurse *.jpg|Resolve-path -relative) -replace "\\","/" -replace "[.]/","" > Passion_Flower_positive_images_txt.txt 

運行在此之後,我檢查了輸出,它似乎正常。所以,我繼續把這個文件作爲輸入的過程。只要我在cmd中運行該程序,就會顯示一些「奇怪」的字符,導致完全中斷和未定義的行爲。

我花了很長時間才弄明白。我使用unix import find.exe手動運行相同的過程,並將所有路徑分隔符字符從'\'替換爲'/',並且將EOL替換爲CR-LF - 稍微浪費一些時間,但它在過去已經奏效。現在

,我把GCI命令(不工作)的輸出,並做了「高級保存選項」在VS2013改變從Unicode編碼(我認爲是Unicode)的歐洲窗口-1252。現在,我將相同的文件加入到程序中,並且工作正常!

我搜索了各種解決方案,默認編碼爲Ascii。我讀了一個解決方案,這樣做:

(gci -path Passion_Flower_positive_images -recurse *.jpg|Resolve-path -relative) -replace "\\","/" -replace "[.]/","" | out-file -path Passion_Flower_positive_images_txt.txt -encoding ascii 

但它在一些錯誤,我無法看到,因爲它退出結束了。

然後我輸入以下內容:

PS C:\> $OutputEncoding 

我收到:
PS F:_102flowers-500X500> $ OutputEncoding

IsSingleByte  : True 
BodyName   : IBM437 
EncodingName  : OEM United States 
HeaderName  : IBM437 
WebName   : IBM437 
WindowsCodePage : 1252 
IsBrowserDisplay : False 
IsBrowserSave  : False 
IsMailNewsDisplay : False 
IsMailNewsSave : False 
EncoderFallback : System.Text.InternalEncoderBestFitFallback 
DecoderFallback : System.Text.InternalDecoderBestFitFallback 
IsReadOnly  : True 
CodePage   : 437 

然而,這使得如果這裏指定的默認編碼我不知道確實,爲什麼手動更改工作,是否真的需要更改編碼?我如何實現這一目標?

+0

除了使用'Out-File'外,您還可以使用'Set-Content',其默認爲ascii。 – Matt

+0

@Matt:讓我試試。 –

+0

這也取決於期望ascii編碼的輸出程序。 – Matt

回答

0

$OutputEncoding變量默認設置爲ASCII。要獲得您想要的結果,您可以將編碼更改爲$OutputEncoding = [Console]::OutputEncoding