PowerShell Out-File 在字符之间输出额外的空格

Gaš*_*rin 10 string powershell encoding character-encoding output

我正在使用一个简单的脚本,该脚本在日志文件中输出当前目录的路径:

(Get-Item .).FullName | out-file "C:\windows\system32\rcwm\rc.log" -append
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都有效。然而,看似随机,追加将导致在输出字符串中的每个字符后添加空格。我的rc.log文件将如下所示:

C:\Users\root\Desktop\2222
C : \ U s e r s \ r o o t \ D e s k t o p \ 2 2 2 2 
Run Code Online (Sandbox Code Playgroud)

请注意,我如何两次输出相同的目录名,并且日志文件中的结果不同。

一旦发生这种情况,附加到日志文件中的每个后续字符串的字符之间都会有空格。

可能是什么问题?

Gaš*_*rin 10

一段时间后,我决定尝试更改 powershell 在日志文件中输出字符串的编码。

\n

我仍然不明白为什么或如何 powershell 决定使用哪种编码,但最好让powershell 知道想使用哪种编码:

\n
(Get-Item .).FullName | out-file "C:\\windows\\system32\\rcwm\\rc.log" -append -Encoding UTF8\n
Run Code Online (Sandbox Code Playgroud)\n

对我来说,UTF-8 似乎效果最好。

\n
C:\\Users\\root\\\xc5\xa1\xc4\x8d   (UTF8)\nC:\\Users\\root\\??   (ASCII)\nC : \\ U s e r s \\ r o o t \\ a   (UNICODE)\n C   :   \\   U   s   e   r   s   \\   r   o   o   t   \\   a   (UTF32)\nC:\\Users\\root\\\xc5\xa1\xc4\x8d\\\xc5\x91\\~2\\\xc3\xbc\xc4\x93 (UTF8)\n
Run Code Online (Sandbox Code Playgroud)\n

输出文件

\n

编辑:\n此后我遇到了“chcp”命令(更改代码页)。UTF-8 的代码是 65001。\n有关详细信息,您可以在此处查看此问题

\n