我们如何使用PowerShell脚本转换CSV文件中的日期

时间:2019-06-10 14:39:57

标签: powershell

我有一个csv文件,其中包含一列-日期。当前其格式为7/30/2019。 我想使用PowerShell进行日期转换。所需格式为:2019-30-07。我们该怎么做?

我用下面的代码来做到这一点。但是它仅对某些记录做部分处理。而不是其他记录。

我正在使用的代码:

(get-content FileCheck.csv) -replace "(\d{2})\/(\d{2})\/(\d{4})", '$3-$2-$1'  |
    sc Output3.csv

2 个答案:

答案 0 :(得分:2)

执行此操作的一种方法是强制转换为[DateTime],然后以所需的格式输出。示例:

Import-Csv ImportData.csv | Select-Object LastName,FirstName,
  @{Name = "Date"; Expression = {"{0:yyyy-MM-dd}" -f ($_.Date -as [DateTime])}}
} | Export-Csv New.csv -NoTypeInformation

此示例选择列,并使用计算所得的属性将日期转换为[DateTime]类型,然后以所需的字符串格式输出。

答案 1 :(得分:0)

为了减少修改csv文件的麻烦,
不了解或更改列的顺序,
您可以使用以下脚本。

  • 第1次读取原始标头
  • Date列替换为具有计算所得的属性的重新格式化的列之后
    (否则将是最后一列)
  • 它使用另外的Select-Object
  • 重新建立了先前的订单

## Q:\Test\2019\06\10\SO_56528528.ps1

$CsvIN  = '.\Sample.csv'
$CsvOut = '.\NewSample.csv'
$Header = (Get-Content $CsvIn -Head 1).split(',')

Import-Csv $CsvIn |
  Select-Object *,@{n='Date';e={(Get-Date $_.Date).ToString('yyyy\-MM\-dd')}} -ExcludeProperty Date | 
    Select-Object $Header | 
      Export-Csv $CsvOut -NoTypeInformation 

> Get-Content .\Sample.csv
foo,bar,Date,baz
abc,def,7/30/2019,ghi

> Get-Content .\NewSample.csv
"foo","bar","Date","baz"
"abc","def","2019-07-30","ghi"