Powershell 我使用-notype信息,那么为什么在使用Out文件时要返回头文件呢?
我按日期筛选了此文件data1.csvPowershell 我使用-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
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,但有时动机在这个问题上是有用的