PowerShell按指定规则重命名文件,修改下划线间特定字段的方法
PowerShell 按规则批量重命名文件实现方案
定位第N个分隔符之间字符串的方法
在PowerShell中处理固定分隔符分割的字符串,最简单的方式是先使用Split()方法将字符串拆分为数组,数组索引从0开始计数,第M个与第M+1个分隔符之间的内容,对应数组索引为M的元素。
以你给出的示例文件名按下划线_分割后,对应关系如下:
# 拆分后的数组索引对应关系 索引0:TRD 索引1:123456789 索引2:ABC123456789 索引3:YYMMDD 索引4:HHMMSS → 第4、5个下划线之间的内容 索引5:12345678 索引6:12345 → 第6、7个下划线之间的内容 索引7及之后:冗余的blabla部分
要删除第7个下划线之后的内容,只需要保留数组前7个元素(索引0-6)即可。
完整实现脚本
# 配置要处理的文件所在目录 $targetDir = "C:\你的文件存储路径" # 获取目录下所有无后缀的目标文件,可根据实际情况调整筛选条件 Get-ChildItem -Path $targetDir -File | ForEach-Object { $originalName = $_.Name # 按下划线拆分文件名 $nameParts = $originalName.Split('_') # 仅保留前7段内容,删除第7个下划线后的冗余部分 $validParts = $nameParts[0..6] # 替换第4、5个下划线之间的HHMMSS为当前时分秒,HH为24小时制,hh为12小时制 $validParts[4] = Get-Date -Format "HHmmss" # 生成包含数字、大小写字母的5位随机字符串,若仅需数字可调整范围 $random5 = -join (48..57 + 65..90 + 97..122 | Get-Random -Count 5 | ForEach-Object {[char]$_}) # 替换第6、7个下划线之间的字段为随机值 $validParts[6] = $random5 # 拼接新文件名并添加.csv后缀 $newName = ($validParts -join '_') + ".csv" # 执行重命名,测试阶段可先注释下行,打开下下行输出验证文件名是否正确 Rename-Item -Path $_.FullName -NewName $newName # Write-Output "原文件名:$originalName → 新文件名:$newName" }
注意事项
- 脚本默认生成的随机字符串包含数字、大小写英文字母,若你仅需要数字,可将生成随机值的代码替换为:
$random5 = -join (0..9 | Get-Random -Count 5) - 时间格式
HHmmss为24小时制,若需要12小时制可修改为hhmmss - 正式执行前建议先注释
Rename-Item行,打开Write-Output行预览转换结果,确认符合要求后再执行重命名操作,避免误改文件。
内容的提问来源于stack exchange,提问作者Kamil Liskutin
相关产品推荐
相关产品推荐

