听起来您的起点是一个内存中的对象数组,要转换为不带标题的CSV。
要获得没有标题的 CSV 表示,您无需使用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] not 在 PowerShell 中跳过数组的第一个元素,因为 1..-1 是一个 范围表达式,它扩展为以下索引列表:@ 987654327@;也就是说,您要提取的正是 3 个元素:第二个 (1)、第一个 (0) 和最后一个 (-1)。
还尝试将对象数组写入 TXT,但它仅作为字段出现,而不是像在 CSV 中那样基于选项卡。示例:
听起来您将内存中的对象数组发送到 *.txt 文件时使用的是 other 而不是 Export-Csv,这不会为您提供 CSV 输出;听起来您使用了> 或Out-File,其中对象的格式与它们打印到控制台的方式相同,这是一种 for-display 格式,不适合编程处理。
get-content ....csv | Select-Object -Skip 1 | Set-Content ....txt
假设输入*.csv 文件是使用
Export-Csv -NoTypeInformation 创建的,那么该命令应该 起作用。
如果你没有使用-NoTypeInformation,则使用-Skip 2,即跳过一个附加行,从而跳过@的type-annotation line 987654340@ - 不幸的是 - 默认输出为第一行。
注意:Windows PowerShell 中 Export-Csv 的这种违反直觉的默认行为已在 PowerShell Core 中得到修复。