听起来您的起点是一个内存对象数组,要转换为没有标题的 CSV。
要获得没有标题的 CSV 表示,您无需使用- 只需通过管道创建一个中间文件to ,它会生成一个字符串数组,其第一个元素 - 标题行 - 您可以使用.Export-Csv
ConvertTo-Csv
Select-Object -Skip 1
因此,您的整个文件可以通过一个可扩展的此处字符串写入:
# Format the date string.
$i = 2 # sample value
$dateString = '{0:yyyy-MM-dd}' -f (Get-Date).AddDays($i)
# The input object array
# $objArray = ...
# Use an expandable here-string to write the output file.
@"
Title
$dateString
$($objArray | ConvertTo-Csv | Select-Object -Skip 1 | Out-String)
"@ | Set-Content -NoNewline "c:\users\user123\documents\adh\_$dateString.txt"
至于你尝试了什么:
尝试使用 [1..-1] 符号将其导入并删除第一行
[1..-1]
不会跳过 PowerShell中数组的第一个元素,因为1..-1
它是扩展为以下索引列表的范围表达式1, 0, -1
:也就是说,您要提取3 个元素:第二个 ( 1
)、第一个 ( 0
) 和最后一个 ( -1
)。
还尝试将对象数组写入 TXT,但它仅作为字段出现,而不是像在 CSV 中那样基于选项卡。例子:
这听起来像是您使用 以外的东西将内存中的对象数组发送到文件,*.txt
这不会给您 CSV 输出;听起来您使用了or ,其中对象的格式与打印到控制台的方式相同,这是一种用于显示的格式,不适合编程处理。Export-Csv
>
Out-File
get-content ....csv | Select-Object -Skip 1 | Set-Content ....txt
假设输入*.csv
文件是用
Export-Csv -NoTypeInformation
.
如果您没有使用-NoTypeInformation
,请使用-Skip 2
,即跳过额外的一行,以便跳过 - 不幸的是 - 默认情况下输出为第一行的类型注释行。Export-Csv
注意: Windows PowerShell中这种违反直觉的默认行为已Export-Csv
在PowerShell Core中得到修复。