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

如何用PowerShell批量处理文件:重复含指定字符串的行并修改重复行内容

批量处理文本文件:针对含特定字符串的行重复并替换后缀

完整实现脚本

$directory = "K:\PS"
# 定义需要替换的后缀列表,可按需调整
$replaceExtensions = @(".inf", ".bat", ".cmd", ".mov")

Get-ChildItem $directory -File -Recurse -Include *.txt | ForEach-Object {
    # 逐行处理文件内容
    $newContent = Get-Content $_.FullName | ForEach-Object {
        # 先输出原行,保留原始内容
        $_
        # 判断当前行是否包含带引号的.ini后缀
        if ($_ -like "*`".ini`"*") {
            # 提取去掉.ini后缀的基础字符串(保留引号)
            $baseLine = $_ -replace '\.ini"$', '"'
            # 遍历后缀列表,生成替换后的新行
            foreach ($ext in $replaceExtensions) {
                $baseLine -replace '"$', "$ext`""
            }
        }
    }
    # 将处理后的内容写入原文件
    $newContent | Set-Content $_.FullName
}

关键逻辑拆解

  1. 目标文件遍历:和你原脚本逻辑一致,用Get-ChildItem递归获取指定目录下的所有.txt文件。
  2. 逐行处理逻辑:
    • 每一行先直接输出,确保原始内容完整保留。
    • 通过-like匹配包含".ini"的行(转义双引号避免语法冲突)。
    • 用正则替换提取基础文件名:-replace '\.ini"$', '"' 会把行尾的.ini"替换为",比如把"K:\FILE1.ini"变成"K:\FILE1"。
    • 遍历后缀列表,把每个后缀拼接到基础字符串末尾,生成新行。
  3. 文件写入:把所有处理后的行一次性写入原文件,因文件体积小,无需流处理。

效果验证

针对你提供的示例输入:

"K:\FILE1.ini"
"K:\FILE1.cfg"
"K:\FILE100.cfg"

脚本执行后会生成预期结果:

"K:\FILE1.ini"
"K:\FILE1.inf"
"K:\FILE1.bat"
"K:\FILE1.cmd"
"K:\FILE1.mov"
"K:\FILE1.cfg"
"K:\FILE100.cfg"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:20:32