0

我正在尝试在 CSV 的第一列中格式化一些日期。当我计划自动执行此任务时,我更喜欢使用类似 powershell 的东西。有没有人对将日期格式从 MM/DD/YYY 更改为 YYYY-MM-DD 的最佳方法有任何建议?我试过这样的事情:

$date = date -f ('yyyyMMdd')

$HMDA = Import-Csv "C:\HMDA\$date.YieldTableFixed.csv"
   ForEach-Object {
      $HMDA.Date = [datetime]::ParseExact($HMDA.Date).ToString('YYYY-MM-DD')
   } |
   Export-Csv -NoTypeInformation C:\HMDA\test.csv

不幸的是,这似乎没有做任何事情,只是给了我一个解析错误,我似乎无法弄清楚为什么会这样。有没有办法我可以这样说:

ForEach-Object{
   $HMDA.A2:$HMDA.A63 = HMDA.$AC.Date.Format('YYYY-MM-DD')
}
4

2 回答 2

2

好的,这里有一些基本错误,但这只是我认为不了解的问题。现在这很难准确回答,因为您没有给我们提供传入日期字段的示例,因此如果它有一些奇怪的格式,这可能会引发错误,因为 PowerShell 无法识别字符串实际上是日期。

首先,如果您通过管道连接到 ForEach 循环,则使用$_. 如:

Import-Csv "C:\HMDA\$date.YieldTableFixed.csv" | ForEach-Object {
    $_.Date = get-date $_.Date -f 'yyyy-MM-dd'
} | Export-Csv -NoTypeInformation C:\HMDA\test.csv

正如我最近从其他人那里了解到的那样,可能更简单的方法是使用 Select,即时创建更新的属性,然后排除原始属性,有效地将其替换为新属性。像这样的东西:

Import-Csv "C:\HMDA\$date.YieldTableFixed.csv" | 
    Select *,@{label = 'Date';expression={get-date $_.Date -f 'yyyy-MM-dd'}} -ExcludeProperty Date | 
    Export-Csv -NoTypeInformation C:\HMDA\test.csv
于 2014-11-17T22:33:12.520 回答
0

ParseExact()需要 3 个参数:日期字符串、格式字符串和格式提供程序(可能是$null)。此外,您的输出格式字符串不正确(年和日格式说明符必须为小写),并且ForEach-Object从管道中读取。

改变这个:

$HMDA = Import-Csv "C:\HMDA\$date.YieldTableFixed.csv"
  ForEach-Object {
    $HMDA.Date = [datetime]::ParseExact($HMDA.Date).ToString('YYYY-MM-DD')
  } |
  Export-Csv -NoTypeInformation C:\HMDA\test.csv

进入这个:

Import-Csv 'C:\HMDA\$date.YieldTableFixed.csv' | ForEach-Object {
  $_.Date = [DateTime]::ParseExact($_.Date, '*M\/dd\/yyyy', $null).ToString('yyyy-MM-dd')
  $_
} | Export-Csv -NoTypeInformation 'C:\HMDA\test.csv'
于 2014-11-17T22:40:35.577 回答