PowerShell脚本匹配替换文件中MM.dd.yy格式日期问题
解决PowerShell脚本替换MM.dd.yy格式日期的问题
问题分析
你当前使用的正则表达式匹配的是yyyy-MM-dd格式的整行日期,和目标的MM.dd.yy格式完全不符;同时正则里的^和$锚点要求日期占据整行,但你的示例文件中日期是在Date: 之后,导致根本匹配不到目标内容。
修正后的正则表达式
要精准匹配MM.dd.yy格式(比如10.12.22),可以使用以下正则:
$regexDate = '\b(0[1-9]|1[012])\.(0[1-9]|[12][0-9]|3[01])\.\d{2}\b'
\b是单词边界,避免误匹配其他数字串中的类似格式(0[1-9]|1[012])匹配两位合法月份(01-12)(0[1-9]|[12][0-9]|3[01])匹配两位合法日期(01-31)\.\d{2}匹配两位年份后缀
如果允许月份/日期是单数字格式(比如1.2.22),可以把正则调整为:
$regexDate = '\b(0?[1-9]|1[012])\.(0?[1-9]|[12][0-9]|3[01])\.\d{2}\b'
修正后的PowerShell脚本
直接通过管道读写同一个文件可能引发文件锁定问题,建议先读取内容到变量再写入:
# 定义匹配MM.dd.yy格式的正则 $regexDate = '\b(0[1-9]|1[012])\.(0[1-9]|[12][0-9]|3[01])\.\d{2}\b' # 获取当前日期并格式化为MM.dd.yy $currentDate = Get-Date -UFormat "%m.%d.%y" # 读取文件内容、替换日期后重新写入 $content = Get-Content -Path "template1.dat" -Raw $content -Replace $regexDate, $currentDate | Out-File -Path "template1.dat" -Encoding utf8
-Raw参数一次性读取整个文件,处理更高效,也避免逐行处理的潜在问题- 指定
-Encoding utf8可以防止文件编码被意外修改
测试效果
针对你的示例输入文件,运行脚本后,Date: 10.12.22会被替换为当前日期的MM.dd.yy格式,比如当前是2024年5月20日,该行会变成Date: 05.20.24。
内容的提问来源于stack exchange,提问作者GamerzKing
相关产品推荐
相关产品推荐

