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