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

File 将文件20140914_foo.pdf重命名为2014-09-14 Sunday.pdf,file,powershell,rename,File,Powershell,Rename,我有一本报纸目录: 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', ''} Ge

我有一本报纸目录:

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}
有没有一种优雅的方式可以在一句话中做到这一点?

EDIT:添加了弗罗德的建议 尝试此操作,代码将拆分文件名,将日期字符串解析为[datetime]类型,并提取其属性以生成所需的名称:

获取子项|%{ $date=[datetime]::ParseExact$\.Name-split \[0],yyyyymmdd,$null $newName=$$date.ToStringyyyy-MM-dd$$date.DayOfWeek.pdf ren$\u$newName } 编辑:添加了弗罗德的建议 尝试此操作,代码将拆分文件名,将日期字符串解析为[datetime]类型,并提取其属性以生成所需的名称:

获取子项|%{ $date=[datetime]::ParseExact$\.Name-split \[0],yyyyymmdd,$null $newName=$$date.ToStringyyyy-MM-dd$$date.DayOfWeek.pdf ren$\u$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:\Users\Keith\20140914_foo.pdf
Destination: C:\Users\Keith\2014-09-14 Sunday.pdf".
What if: Performing the operation "Rename File" on target "Item: C:\Users\Keith\20140915_foo.pdf 
Destination: C:\Users\Keith\2014-09-15 Monday.pdf".
What if: Performing the operation "Rename File" on target "Item: C:\Users\Keith\20140916_foo.pdf
Destination: C:\Users\Keith\2014-09-16 Tuesday.pdf".

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

给你-一行:

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:\Users\Keith\20140914_foo.pdf
Destination: C:\Users\Keith\2014-09-14 Sunday.pdf".
What if: Performing the operation "Rename File" on target "Item: C:\Users\Keith\20140915_foo.pdf 
Destination: C:\Users\Keith\2014-09-15 Monday.pdf".
What if: Performing the operation "Rename File" on target "Item: C:\Users\Keith\20140916_foo.pdf
Destination: C:\Users\Keith\2014-09-16 Tuesday.pdf".

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

大括号中的表达式是一个脚本块,因此可以包含多个语句。将日期和日期提取为临时变量,构建新名称,然后将其作为字符串返回大括号中的表达式是一个脚本块,因此可以包含多个语句。将日期和日期提取到临时变量,构建新名称,然后将其作为字符串返回。我将使用$newname=$$date.tostringyyyyy-MM-dd_$$date.DayOfWeek.pdf清理脚本块:我将使用$newname=$$date.ToStringyyyy-MM-dd$$date.DayOfWeek.pdf清理脚本块: