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

获取等效于Shell版本替换命令的PowerShell及Windows命令

批量替换所有pom.xml文件版本号的PowerShell及Windows命令实现

问题根源

你编写的PowerShell命令存在两个核心问题:

  • 未启用递归遍历:Get-ChildItem默认仅扫描当前目录,没有添加-Recurse参数,因此无法处理子模块目录下的pom.xml
  • 替换逻辑错误:使用了未定义的变量$version和占位符"VERSION",没有直接指定目标替换的版本号规则

正确的PowerShell实现

直接执行版

Get-ChildItem -Path . -Filter pom.xml -Recurse | ForEach-Object {
    # 一次性读取整个文件,避免逐行处理的换行符问题
    $content = Get-Content $_.FullName -Raw
    # 转义点号(正则中.匹配任意字符),精准替换版本号
    $content = $content -replace '1\.0\.1', '2\.0\.0'
    # 以UTF-8编码保存,避免pom.xml乱码
    Set-Content $_.FullName -Value $content -Encoding UTF8
}

关键参数说明:

  • -Recurse:递归遍历当前目录及所有子目录下的pom.xml
  • -Raw:读取整个文件为单字符串,提升替换效率并避免换行符异常
  • 正则转义:用\.匹配实际的版本号点号,防止误匹配其他含点的文本

可复用脚本版

如果需要频繁更换版本号,可将版本号设为变量:

$oldVersion = '1\.0\.1'
$newVersion = '2\.0\.0'

Get-ChildItem -Path . -Filter pom.xml -Recurse | ForEach-Object {
    (Get-Content $_.FullName -Raw) -replace $oldVersion, $newVersion | 
    Set-Content $_.FullName -Encoding UTF8
}

Windows CMD命令实现

CMD原生无便捷的批量文本替换工具,可结合递归遍历命令与PowerShell完成需求:

直接在CMD窗口执行

for /r %f in (pom.xml) do powershell -Command "(Get-Content '%f' -Raw) -replace '1\.0\.1', '2\.0\.0' | Set-Content '%f' -Encoding UTF8"

批处理脚本(.bat)版

若写入批处理文件,需将%f改为%%f:

@echo off
for /r %%f in (pom.xml) do (
    powershell -Command "(Get-Content '%%f' -Raw) -replace '1\.0\.1', '2\.0\.0' | Set-Content '%%f' -Encoding UTF8"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:45:13