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

PowerShell:移除含PCARTE行的前13个字符并保存处理结果

处理文本文件:移除指定行的前13个字符并保存结果

我需要处理一个文本文件,要求移除所有包含字符串PCARTE的行的前13个字符,同时保留其他行不变,最终将处理后的内容写入文件。

原始文件内容

PCARTE 14/04 PAYMENTS
D17/04/2023
T-7.90
PCARTE 14/04 PAYMENTS 
D17/04/2023
T-7.13
PCARTE 14/04 PAYMENTS 
D17/04/2023
T-42.63
PCARTE 15/04 Pahe 
D15/04/2023
T-121.89
PCARTE 14/04 NY
D15/04/2023
T-11.75
PCARTE 14/04 CHE*

期望处理结果

PAYMENTS
D17/04/2023
T-7.90
PAYMENTS 
D17/04/2023
T-7.13
PAYMENTS 
D17/04/2023
T-42.63
Pahe 
D15/04/2023
T-121.89
NY
D15/04/2023
T-11.75
CHE*

原脚本的问题

你找到的脚本存在两个关键问题:

  • 匹配逻辑不准确:-like使用的通配符表达式"PCARTE *"只能匹配以PCARTE (带空格)开头的行,无法覆盖所有包含PCARTE的目标行;
  • 未处理结果存储与写入:脚本仅对符合条件的行做了移除操作,但没有将处理后的行(包括未修改的行)收集起来,也没有写入到文件中。

修正后的完整脚本

以下是可直接运行的脚本,完成读取、处理、写入全流程:

# 指定文件路径
$filePath = "C:\Users\TEST\Downloads\TEST.txt"
# 读取原始文件内容
$fileContent = Get-Content $filePath

# 初始化数组存储处理后的内容
$processedLines = @()

foreach ($line in $fileContent) {
    # 判断当前行是否以PCARTE开头(精准匹配目标行)
    if ($line -match '^PCARTE') {
        # 移除前13个字符
        $processedLine = $line.Remove(0, 13)
    } else {
        # 非目标行直接保留
        $processedLine = $line
    }
    # 将处理后的行加入结果数组
    $processedLines += $processedLine
}

# 将结果写入文件(可选择覆盖原文件,或指定新路径)
Set-Content -Path $filePath -Value $processedLines
# 若不想覆盖原文件,可指定新路径:
# Set-Content -Path "C:\Users\TEST\Downloads\TEST_processed.txt" -Value $processedLines

更简洁的管道写法

如果想简化代码,可直接用管道结合正则替换一步完成:

$filePath = "C:\Users\TEST\Downloads\TEST.txt"
# 读取文件后逐行处理:匹配以PCARTE开头的行,移除前13个字符
(Get-Content $filePath) | ForEach-Object {
    if ($_ -match '^PCARTE') { $_ -replace '^.{13}', '' } else { $_ }
} | Set-Content -Path $filePath

解释:^.{13}是正则表达式,匹配行开头的任意13个字符,替换为空即可实现移除前13个字符的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:02:41