powershell - 在 Powershell 中替换文件名的一部分
问题描述
我有看起来像这样的文件:
2020-0517-example.pdf
2020-0412-example.pdf
2020-0607-example.pdf
我想将文件重命名为:
2020-0723-example.pdf
2020-0723-example.pdf
2020-0723-example.pdf
我基本上会将日期替换为今天的日期,同时保留年份和后缀。
解决方案
如果您想添加一些完整性检查以确保您正在处理日期,您可以使用模式匹配,然后重命名部分日期:
$date = Get-Date -Format MMdd
Get-ChildItem -Path <filepath> -File |
Where Basename -match '^(?:19|20)\d\d-(?:0[1-9]|1[012])\d\d-' |
Rename-Item -NewName { $_.Name -replace '(?<=^\d{4}-)\d{4}',$date } -whatif
或者,您可以先解析日期字符串以使用以下方法进行验证TryParseExact
:
$date = Get-Date -Format MMdd
Get-ChildItem -Path <filepath> -File |
Where Name -match '^\d{4}-\d{4}-' | Foreach-Object {
if ([datetime]::TryParseExact($_.Name.Substring(0,9),'yyyy-MMdd',[System.Globalization.CultureInfo]::InvariantCulture,[System.Globalization.DateTimeStyles]::None,[ref]0)) {
$FileParts = $_.Name -split '-',3
Rename-Item -Path $_ -NewName ($FileParts[0],$date,$FileParts[2] -join '-') -WhatIf
}
}
您需要删除-WhatIf
参数才能完成重命名操作。
解释:
使用-split '-',3
,我们确保我们只剩下不超过三个数组元素。这为将文件名重新组合在一起提供了可预测数量的索引。[0]
将是一年。[1]
将是月日。[2]
将是文件名的其余部分。
-replace
有关和正则表达式的详细信息,请参阅以下-match
内容:
推荐阅读
- asp.net - 关闭带有特定 url 的浏览器窗口(由不同的浏览器打开)
- java - 使用 StrategySelectionException 和 BeanCreationException (entityManagerFactory) 启动问题应用程序
- codeigniter - Codeigniter 4 pdf url路由
- windows-7-embedded - 当文本字段在 Chrome 或 Safari 中处于活动状态时,如何强制打开 Windows Embedded PosReady 7 键盘
- skia - 类似于skia中“丢弃”的API
- python - python数据模拟中的最佳工作流程:数组VS字典VS数据框
- mongodb - 使用 Fluentd 将数据传输到 DocumentDB
- json - JQ:将对象添加到具有相同键名的嵌套 json
- javascript - 在反应中思考 - 计算字段
- c++ - 在 C++ 中将 DDMMMYY[25JUN20] 转换为 YYYYMMDD[20200620]