我有一个报纸目录:
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对象,这样我们就可以获得星期几。