我有一个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