我有一个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
答案 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文件的麻烦,
不了解或更改列的顺序,
您可以使用以下脚本。
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"