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

PowerShell批量处理文本文件:生成新文件避免覆盖原文件

批量处理文本文件并生成带指定后缀的新文件

我是PowerShell完全新手,整理出的单文件处理脚本可以扫描文本文件、清理冗余数据、替换字符并生成新文件,脚本如下:

Get-Content C:\Temp\Tomatoes-2022-09-27.txt |
    Where-Object { $_.Contains('red') } |            # 仅保留包含"red"的行
    Foreach-Object { $_ -replace "[/()]", ":" } |    # 将/、(、)替换为冒号
    Where-Object { -not $_.Contains('too red') } |   # 移除包含"too red"的行
Set-Content C:\Temp\Tomatoes-2022-09-27Ripe.txt        # 另存为带Ripe后缀的新文件

这个单文件脚本可以正常工作,但批量处理目录内文件时,当前的批量脚本会覆盖原文件,无法生成Tomatoes-[日期]Ripe.txt格式的新文件,现有批量脚本如下:

Get-ChildItem C:\Temp\*.* -Recurse | ForEach-Object { 
    (Get-Content $_) | 
    Where-Object { $_.Contains('red') } |  
    ForEach-Object { $_ -replace "[/()]", ":" } | 
    Where-Object { -not $_.Contains('too red') } | 
    Set-Content $_ 
}

修改后的批量脚本

无需先复制文件再处理,直接在批量处理时生成新文件名即可。关键是拆分原文件名的结构,拼接出带Ripe后缀的新路径:

Get-ChildItem C:\Temp\*.* -Recurse | ForEach-Object { 
    # 生成新文件名:原主名称+Ripe+原扩展名
    $newFilePath = Join-Path -Path $_.DirectoryName -ChildPath "$($_.BaseName)Ripe$($_.Extension)"
    (Get-Content $_.FullName) | 
        Where-Object { $_.Contains('red') } |  
        ForEach-Object { $_ -replace "[/()]", ":" } | 
        Where-Object { -not $_.Contains('too red') } | 
        Set-Content $newFilePath -Encoding utf8 # 指定编码避免乱码
}

关键说明

  • $_.BaseName:获取文件的主名称(不含扩展名),比如Tomatoes-2022-09-27
  • $_.Extension:获取文件的扩展名,比如.txt
  • Join-Path:安全拼接目录和文件名,避免手动拼接路径时出现格式错误
  • Set-Content添加-Encoding utf8:确保输出文件编码统一,防止中文或特殊字符乱码

关于是否需要先复制再处理

不需要额外复制文件再处理。上述脚本直接读取原文件内容,处理后写入新生成的文件,原文件会完整保留,不会被修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:20:29