2012-02-16 54 views
2

当我将我的$ string变量内容放入某个文本文件时,它似乎会添加一些垃圾字符。例如,我在字符串中写入实用程序名称,并将该字符串复制到文件中,如下所示。powershell字符串操作是否添加垃圾字符?

$CodeCount+="ccount.exe" 

$CodeCount | Out-file "C:\CodeCount.bat" 

当我执行这个批处理文件时,它通过显示前面的一些垃圾字符失败。 enter image description here

即使我试着trim(),但仍然是相同的结果。

如何避免在前面添加垃圾邮件?

+2

尝试'出文件-Encoding ASCII' – 2012-02-16 07:32:29

回答

7

不要使用out-file,至少,在默认的形式。使用set-content。或者明确地设置out-file的编码,如out-file -encoding ascii。默认情况下,out-file使用utf16(ucs-2实际)编码,在许多应用程序(包括版本控制系统,如Hg,Git)中不会将其视为纯文本,并添加您提到的“有趣”字符。

请注意,重定向>与out-file相同,并会给您相同的结果。

2

这是因为用于Out-file的标准编码是Unicode,它在文件的开头添加了一些BOM值(用十六进制编辑器打开文件时可以看到这些值)。为了避免这些字节使用-encoding ASCII

$CodeCount | Out-file -encoding ascii "C:\CodeCount.bat" 
2

Out-File的默认编码是Little Endian Unicode。 cmd.exe并不认同这一编码以及工作,所以只需要使用ASCII

Out-File -Encoding ASCII