将文件20140914_foo.pdf重命名为2014-09-14 Sunday.pdf



我有一个报纸目录:

20140914_foo.pdf
20140915_foo.pdf
20140916_foo.pdf

我想把它们重命名为

2014-09-14 Sunday.pdf
2014-09-15 Monday.pdf
2014-09-16 Tuesday.pdf

这两种说法起到了作用:

Get-ChildItem | Rename-Item -NewName {$_.Name.Insert(4,'-').Insert(7,'-') -replace 'foo', ''}
Get-ChildItem | Rename-Item -NewName {$_.BaseName + ' ' + (get-date($_.BaseName)).DayOfWeek + $_.Extension}

有没有一种优雅的方式可以在一句话中做到这一点?

编辑:添加了Frode的建议

尝试一下,代码将拆分文件名,将日期字符串解析为[datetime]类型,并提取其属性以构建所需的名称:

Get-ChildItem | % {
    $date = [datetime]::ParseExact(($_.Name -split "_")[0],"yyyyMMdd",$null)
    $newName = "$($date.ToString("yyyy-MM-dd")) $($date.DayOfWeek).pdf"
    ren $_ $newName
}

给你-一行:

Get-ChildItem | Rename-Item -NewName {$_.Name -replace '(d{4})(d{2})(d{2})_[^.]+(.w+)', "`$1-`$2-`$3 $([DateTime]::ParseExact(($_.BaseName -split '_')[0], 'yyyyMMdd',$null).DayOfWeek)`$4"} -WhatIf
What if: Performing the operation "Rename File" on target "Item: C:UsersKeith20140914_foo.pdf
Destination: C:UsersKeith2014-09-14 Sunday.pdf".
What if: Performing the operation "Rename File" on target "Item: C:UsersKeith20140915_foo.pdf 
Destination: C:UsersKeith2014-09-15 Monday.pdf".
What if: Performing the operation "Rename File" on target "Item: C:UsersKeith20140916_foo.pdf
Destination: C:UsersKeith2014-09-16 Tuesday.pdf".

删除-WhatIf以进行实际重命名。上面的方法使用捕获组从文件名中捕获年、月、日和扩展名。然后,它将年、月、日的捕获组解析为DateTime对象,这样我们就可以获得星期几。

最新更新