我有以下代码:
$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中正确显示。有人知道这是为什么吗?
为什么它对 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
选项):我想知道为什么。