0

我在文本文件中有以下格式的日期:06/18/2012 (dd/mm/yyyy),我想使用 Powershell 将其转换为:2012-18-06 (yyyyddmm)。

(Get-Content C:\script\test.txt) | 
Foreach-Object {$_ -replace "([0-9]+)/+([0-9]+)/+([0-9]+)", '$3$2$1'} | 
Set-Content C:\script\test.txt

以上似乎工作正常。虽然我正在努力改变以下内容

12 Jan 2013 Test.docx    
01 February 2001 File.pptx    
Meeting 04 Feb 2012.xls    
09 September 2011.txt    
30 Jan 13.doc

进入 (yyyyddmm)

在 SQL Server 或 Powershell 中是否有一种简单的方法来执行此操作?

4

1 回答 1

0

尝试这个:

$lines = @'
12 Jan 2013 Test.docx    
01 February 2001 File.pptx    
Meeting 04 Feb 2012.xls    
09 September 2011.txt    
30 Jan 13.doc
'@ -split "`n"

$lines | % {[regex]::Replace($_, '(.*?)(\d+\s+\w+\s+[0-9]+)(.*?)', {param($match) $d = [DateTime]::Parse($match.groups[2].value).ToString("yyyyddMM"); "$($match.groups[1].value)$d$($match.groups[3].value)"})}

这使用 [regex]::Replace 重载,您可以在其中指定回调来处理匹配的文本。有了它,您可以将日期部分运行到 DateTime.Parse 中,然后按照您想要的方式重新格式化。

于 2013-09-30T04:11:16.350 回答