我有一个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到CR-LF - 虽然有点用,但过去一直有效。
现在,我接受了gci命令的输出(它没有工作)并在VS2013中执行"高级保存选项" 来更改编码(我发现是Unicode)从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
,为什么手动更改工作,是否真的需要更改编码?我如何实现这一目标?
答案 0 :(得分:0)
$OutputEncoding
变量默认设置为ASCII。要获得所需的结果,您可以将编码更改为$OutputEncoding = [Console]::OutputEncoding
。