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

如何使用PowerShell递归遍历文件夹替换C/C++文件多行头为单行头

PowerShell实现C/C++文件多行头部替换(保留原换行符)

直接上可运行的脚本,附带关键细节说明:

# 定义旧头部的正则匹配模式(兼容CRLF/LF换行,适配任意$Id内容)
$oldHeaderRegex = @"
\/\*{80} \/\/_\|[\r\n]+File: \$Id: .* \$[\r\n]+[\r\n]+LEGAL NOTICE: COPYRIGHT Company Inc\., All Rights Reserved [\r\n]+\*{80}\/ \/\/\|_\/
"@

# 定义新的单行头部内容
$newHeader = "// Copyright company name - url"

# 递归遍历目标文件并执行替换
Get-ChildItem -Recurse -Include *.h,*.c,*.hpp,*.cpp | ForEach-Object {
    # 读取完整文件内容,保留原编码和换行符
    $content = Get-Content -Path $_.FullName -Raw -Encoding Default
    # 执行多行替换
    $newContent = $content -replace $oldHeaderRegex, $newHeader
    # 写回文件,避免额外添加换行符
    Set-Content -Path $_.FullName -Value $newContent -Encoding Default -NoNewline
}

关键细节说明

  • 递归文件筛选:Get-ChildItem -Recurse -Include精准定位所有C/C++源文件和头文件,无需手动遍历子文件夹。
  • 保留换行符与编码:
    • -Raw参数将文件读取为单个字符串,支持多行正则匹配,同时完整保留原文件的换行符结构(解决sed篡改换行符的问题)。
    • -Encoding Default沿用文件原编码,防止乱码;-NoNewline避免写回时额外添加不必要的换行。
  • 正则适配性:
    • 转义了原头部中的正则特殊字符(如*、$、/),确保精确匹配。
    • 用[\r\n]+匹配任意换行组合(CRLF/LF),兼容Windows和类Unix系统的文件格式。
    • 把$Id后的固定路径替换为.*,适配不同文件中可能存在的不同版本号或路径。

安全测试建议

执行替换前,可在Set-Content后添加-WhatIf参数,预览将被修改的文件列表,确认无误后再移除该参数执行实际替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:57:07