提问者:小点点

Powershell输出文件不适用于CSV


我有以下代码:

$databaseContents = "col1,col2,col3,col4"
$theDatabaseFile = "C:\NewFolder\Database.csv
$databaseContents | Out-File $theDatabaseFile

然而,当我在Excel中打开csv文件时,它在A1单元格中有col1、col2、col3、col4,而不是A1单元格中的col1、B1单元格中的col2等。

我注意到了一些奇怪的事情:如果我在记事本中打开文件,并将文本复制到另一个记事本实例中,并将其保存为Database1.csv,然后在Excel中打开它,它将按预期显示。

如何让 Out-File 命令将其另存为.csv文件,内容按预期分为 4 列?

编辑:我注意到如果我使用Set-Content而不是Out-File,则csv文件会在Excel中正确显示。有人知道这是为什么吗?


共3个答案

匿名用户

为什么它对 Excel 有影响我不清楚,但它归结为生成的输出文件的编码 - Unicode(在不起作用的情况下)与 ASCII(在起作用的情况下)。

@JPBlanc的替代方法有效,因为它将输出文件的编码设置为ASCII,其中您的原始示例(隐式)将输出文件的编码设置为Unicode。

只需将< code>-Encoding ascii添加到您的原始示例中就可以了:

$databaseContents = "col1,col2,col3,col4"
$theDatabaseFile = "C:\NewFolder\Database.csv
$databaseContents | Out-File $theDatabaseFile -Encoding ascii

将显式 -Encoding unicode 添加到原始示例中会产生与您遇到的相同损坏结果:

$databaseContents = "col1,col2,col3,col4"
$theDatabaseFile = "C:\NewFolder\Database.csv
$databaseContents | Out-File $theDatabaseFile -Encoding unicode

这基本上就是正在发生的事情。

匿名用户

这也适用于:

$databaseContents = "col1;col2;col3;col4"
$theDatabaseFile = "C:\temp\Database.csv"
$databaseContents | Out-File $theDatabaseFile -Encoding ascii

默认情况下,Excel接缝中的CSV分隔符为';和Out-File保存为Unicode,强制ASCII接缝以提供您要查找的结果。

匿名用户

我遇到了与Backwards_Dave相同的问题,就像他一样,使用< code>Set-Content而不是< code>Out-File命令对我有效:

#Build $temp String
$temp = "$scriptApplication;$applicationName;$type;$description;$maxSessions;$enabled;$tempParams`n"

#Write $temp String to $fichierCsv file
"$temp" | Set-Content $fichierCsv

我尝试使用JPBlanc和J0e3gan的解决方案,但它不起作用(-编码ascii选项):我想知道为什么。