2015-05-08 91 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