gpt4 book ai didi

powershell - 通过重新格式化文件名中嵌入的日期字符串来重命名文件

转载 作者:行者123 更新时间:2023-12-02 23:19:33 26 4
gpt4 key购买 nike

我在CMD中使用Windows的Powershell从文件名中删除了“星期一,星期二,星期三”等,因此效果很好

Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("Mon ", "") }
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("Tue ", "") }
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("Wed ", "") }
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("Thur ", "") }
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("Fri ", "") }
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace("Sat ", "") }

现在我的文件名看起来像这样:
2018年7月13日-Lorem ipsum

我想将日期与月份切换,因此将是:
2018年7月13日,所以我可以按月对其进行排序。甚至2018年7月13日。

我该怎么办?

谢谢,
麦克风

最佳答案

您可以使用Rename-Itemdelay-bind script block将两个所需的转换合并为一个操作,其中 -replace operator允许您根据正则表达式(正则表达式)转换文件名。

Get-ChildItem -Recurse -Name | Rename-Item -NewName {
$_.Name -replace '\w+ (\d+) (\w+) (\d+)', '$3 $2 $1'
} -WhatIf
-WhatIf预览重命名操作;删除它以执行实际的重命名。

例如,名为 Mon 13 July 2018 - Lorem ipsum的输入文件将重命名为 2018 July 13 - Lorem ipsum

注意:此示例文件名碰巧没有文件扩展名,但是上面和下面的解决方案都可以使用具有扩展名的文件名。

有关PowerShell的 -replace运算符的更多信息,请参见 this answer

如果您希望 使用嵌入式格式(例如2018-07-13来表示13 July 2018)使文件名真正可排序,则需要通过 -split operator进行更多工作:
Get-ChildItem -Recurse -Name | Rename-Item -NewName {
# Split the name into the date part (ignoring the weekday) and the
# rest of the file name.
$null, $date, $rest = $_.Name -split '\w+ (\d+ \w+ \d+)'
# Convert the date string to [datetime] instance, reformat it, and
# append the rest.
([datetime] $date).ToString('yyyy-MM-dd') + $rest
} -WhatIf

例如,名为 Mon 13 July 2018 - Lorem ipsum的输入文件将重命名为 2018-07-13 - Lorem ipsum

有关PowerShell的 -split运算符的更多信息,请参见 this answer
帮助主题 about_Assignment_Operators中介绍了分配给多个变量( $null, $date, $rest = ...)

关于powershell - 通过重新格式化文件名中嵌入的日期字符串来重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55182374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com