PowerShell输出重定向编码问题



我有一个PS脚本,可以将文件夹中所有文件的相对路径复制到文本文件。

(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和eol到cr-lf-exening-exexing-exexing in tocking in过去。

现在,我采用了gci命令的输出(不起作用),并在VS2013中的"高级保存选项" 进行了更改编码(我发现是Unicode的编码)到欧洲Windows-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

但是,这让我想知道这里指定的默认编码是否确实是WindowsCodePage : 1252,为什么手动更改工作并且真的需要更改编码?我该如何实现?

$OutputEncoding变量默认设置为ASCII。为了获得所需的结果,您可能将编码更改为$OutputEncoding = [Console]::OutputEncoding

最新更新