You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell移除文件名前缀/后缀日期的方法及Replace与-replace差异

PowerShell中String.Replace()与-replace的差异及文件名日期移除优化

一、为什么String.Replace()无效,-replace有效?

  • String.Replace()是字面量替换:它会把传入的匹配字符串当成普通文本完全匹配,不会解析正则表达式语法。比如你写的_\d{12}.,它会直接去找文件名里有没有_\d{12}.这个精确字符串,而不是识别下划线+12位数字+句点的格式,自然匹配不到目标内容,所以替换无效果。
  • -replace是正则表达式替换:PowerShell的-replace运算符默认支持正则匹配,能解析\d(匹配数字)、{n}(匹配n次重复)这类正则语法,因此可以正确识别文件名中的日期格式,完成预期替换。

二、更简洁的实现方式

可以把两种日期格式的匹配逻辑合并到一个正则表达式中,一次替换完成,无需链式调用:

$File = "D:\TESTLB\DirIn\CRIS_Invoice_202411140311.txt"
$Path = Split-Path -Path $File -Parent
$FileName = Split-Path -Path $File -Leaf

# 同时匹配前缀YYYYMMDD. 和 后缀_YYYYMMDDHHNN.,替换为对应格式的*
$CleanFileName = $FileName -replace '^(?:\d{8}\.)|(?:_\d{12}\.)', {
    # 根据匹配内容的开头决定替换后的格式
    $_.Value.StartsWith('_') ? '_*.' : '*.'
}

# 示例输出:CRIS_Invoice_*.txt
$CleanFileName

如果追求更紧凑的写法,也可以用正则分组实现:

$CleanFileName = $FileName -replace '^(\d{8})\.|_(\d{12})\.', {
    $_.Groups[1].Success ? '*.' : '_*.'
}

内容的提问来源于stack exchange,提问作者Tony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 03:49:51