Powershell 我使用-notype信息,那么为什么在使用Out文件时要返回头文件呢?

Powershell 我使用-notype信息,那么为什么在使用Out文件时要返回头文件呢?,powershell,Powershell,我按日期筛选了此文件data1.csv 2017.11.1,09:55,1.1,1.2,1.3,1.4,1 2017.11.2,09:55,1.5,1.6,1.7,1.8,2 我没有得到带有-NoTypeInformation的标题: $CutOff = (Get-Date).AddDays(-2) $filePath = "data1.csv" $Data = Import-Csv $filePath -Header Date,Time,A,B,C,D,E $Data2 = $Data

我按日期筛选了此文件data1.csv

2017.11.1,09:55,1.1,1.2,1.3,1.4,1 
2017.11.2,09:55,1.5,1.6,1.7,1.8,2

我没有得到带有
-NoTypeInformation
的标题:

$CutOff = (Get-Date).AddDays(-2)
$filePath = "data1.csv"
$Data = Import-Csv $filePath -Header Date,Time,A,B,C,D,E

$Data2 = $Data | Where-Object {$_.Date -as [datetime] -gt $Cutoff} | convertto-csv -NoTypeInformation -Delimiter "," | % {$_ -replace '"',''} 
但是当用
Out文件重写时

$Data2 | Out-File "data2.csv" -Encoding utf8 -Force
我将返回标头,因为data2.csv包含:

Date,Time,A,B,C,D,E
2017.11.2,09:55,1.5,1.6,1.7,1.8,2

为什么我有日期、时间、A、B、C、D、E?

-NoTypeInformation
与文件中的行的数据类型有关,而与标题无关。移除它以查看显示的内容

从输出中省略类型信息标题。默认情况下,输出中的字符串包含#TYPE,后跟对象类型的完全限定名

我的

CSV需要标题。这就是为什么它正在制造一个。如果不想在输出中看到标题,请使用
选择对象-跳过1
将其删除

$Data | 
    Where-Object {$_.Date -as [datetime] -gt $Cutoff} | 
    ConvertTo-CSV -NoTypeInformation -Delimiter "," |
    Select-Object -Skip 1 |
    % {$_ -replace '"'}
我不会将
文件导出到自身。您也可以在此处通过管道连接到
设置内容


我猜整个过程就是保持源文件处于相同的状态,只是根据日期过滤掉一些行。您只需分析每行中的日期,就可以跳过大部分内容

$threshold = (Get-Date).AddDays(-2)
$filePath = "c:\temp\bagel.txt"
(Get-Content $filePath) | Where-Object{
    $date,$null=$_.Split(",",2)
    [datetime]$date -gt $threshold
} | Set-Content $filePath
现在,您不必担心PowerShell CSV对象结构或输出,因为我们处理的是文件本身的原始数据

这将获取输入文件的每一行,并在解析日期与阈值不匹配时将其过滤掉。根据需要更改输入输出cmdlet的编码。
$date,$null=$\拆分(“,”,2)
所做的是拆分行
在逗号上分成两部分。其中第一个变为
$date
,由于这只是一个过滤条件,我们将行的其余部分转储到$null中

格式正确的CSV文件必须具有列标题。在生成CSV时使用
-NoTypeInformation
不会影响列标题;相反,它会影响是否包含PowerShell对象类型信息。如果导出CSV时不使用
-NoTypeInformation
,则CSV文件的第一行将有一行类似于
#TYPE System.PSCustomObject
,如果要在电子表格程序中打开CSV,则不需要该行

如果随后
导入CSV
,则标题(日期、时间、A、B、C)用于创建PSObject的字段,以便您可以使用标准点符号(例如,
$CSV[$line].Date
)引用这些字段


导入CSV
上指定
-Header
的功能本质上是一种“黑客”行为,它允许cmdlet处理逗号分隔但不包括列标题的文件。

-NoTypeInformation
与头无关,而与文件中行的数据类型有关。1。输出CSV文件的常用方法是
导出CSV
,而不是
输出文件
。2.PowerShell将始终包含标题行。(
-NoTypeInformation
没有像马特指出的那样省略标题。)它有什么问题吗?@Bill\u Stewart不能使用导出Csv put双引号,我希望输入的格式相同file@Bill_Stewart控制台中的$Data2未显示标题我不希望“正确”格式化csv我想要与我收到的输入相同的格式,由其他软件导出,这是不更改格式要求的一部分。我想我们现在理解@user310291,但有时动机在这个问题上是有用的