我有一個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
然而,這使得如果這裏指定的默認編碼我不知道確實,爲什麼手動更改工作,是否真的需要更改編碼?我如何實現這一目標?
除了使用'Out-File'外,您還可以使用'Set-Content',其默認爲ascii。 – Matt
@Matt:讓我試試。 –
這也取決於期望ascii編碼的輸出程序。 – Matt