批量修改TXT文件#Start/#Stop时间并另存的PowerShell技术问询
批量修改TXT文件时间戳的PowerShell完整实现
需求概述
- 批量处理指定目录下的所有TXT文件
- 将
#Start=行的时间部分替换为当日00:00:00,保留原日期 - 将
#Stop=行的日期与#Start=行保持一致,时间替换为当日23:00:00 - 修改后另存为新文件,不覆盖原文件
用户现有定位代码(示例)
$files = Get-ChildItem -Path "C:\Your\File\Path" -Filter "*.txt" foreach ($file in $files) { $content = Get-Content $file.FullName foreach ($line in $content) { if ($line -match "^#Start=") { # 已定位Start行,待补充处理逻辑 } if ($line -match "^#Stop=") { # 已定位Stop行,待补充处理逻辑 } } }
完整功能代码
# 替换为你的目标文件目录 $targetDir = "C:\Your\TXT\Directory" # 获取所有TXT文件 $txtFiles = Get-ChildItem -Path $targetDir -Filter "*.txt" foreach ($file in $txtFiles) { $content = Get-Content $file.FullName $startDate = $null # 逐行处理内容 $newContent = $content | ForEach-Object { $currentLine = $_ # 匹配并处理#Start行 if ($currentLine -match "^#Start=(\d{4}-\d{2}-\d{2})T\d{2}:\d{2}:\d{2}") { $startDate = $matches[1] "#Start=$startDate`T00:00:00" } # 匹配并处理#Stop行(需确保已获取到Start日期) elseif ($currentLine -match "^#Stop=" -and $startDate) { "#Stop=$startDate`T23:00:00" } # 其他行保持原样 else { $currentLine } } # 生成新文件名(原文件名后加_modified后缀) $newFilePath = Join-Path -Path $file.DirectoryName -ChildPath "$($file.BaseName)_modified$($file.Extension)" # 保存修改后的内容 $newContent | Set-Content -Path $newFilePath -Encoding UTF8 } Write-Host "批量处理完成,新文件已保存至原目录"
文件格式示例
原文件内容
#Start=2024-05-20T14:30:00
#Stop=2024-05-19T18:45:00
配置项A=123
备注:测试文件
修改后新文件内容
#Start=2024-05-20T00:00:00
#Stop=2024-05-20T23:00:00
配置项A=123
备注:测试文件
关键逻辑说明
- 用正则表达式
^#Start=(\d{4}-\d{2}-\d{2})T\d{2}:\d{2}:\d{2}精准匹配Start行,提取日期部分存入变量 - 处理Stop行时直接复用已提取的日期,保证日期一致性
- 新文件名添加
_modified后缀,彻底避免覆盖原文件 - 指定
-Encoding UTF8保存,防止中文内容出现乱码问题
内容的提问来源于stack exchange,提问作者erwe
相关产品推荐
相关产品推荐

