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

如何用Powershell将version.properties自动拷贝到gradle项目指定子目录

PowerShell通用版本分发脚本实现

现有脚本问题梳理

  • 变量定义错误:$SourceDirectory 初始赋值指向了具体文件而非项目根目录,后续目录遍历逻辑完全失效
  • 变量名拼写错误:foreach循环中使用了Sfolders,漏掉了$标识,会触发变量不存在报错
  • 语法错误:Copy-Item 命令的-Path参数前缺少空格,路径拼接时{$SourceDirectory}的大括号使用错误,会导致路径解析失败
  • 逻辑冗余:三个目标路径判断逻辑完全重复,维护成本高

通用实现脚本

# 配置项:可根据实际情况修改
$ProjectRoot = $PWD.Path  # 默认使用当前工作目录作为Gradle项目根目录,也可写死为绝对路径比如 "C:\your\project\root"
$SourceFile = Join-Path -Path $ProjectRoot -ChildPath "version.properties"
# 预定义目标目录的相对路径,可按需增删
$TargetRelativePaths = @(
    "src/main/resources",
    "src/main/application",
    "src/main/webapp"
)

# 先校验源文件是否存在
if (-not (Test-Path -Path $SourceFile -PathType Leaf)) {
    Write-Error "源文件不存在:$SourceFile,请确认项目根目录配置正确"
    exit 1
}

# 遍历所有目标相对路径,查找项目中所有匹配的目录
foreach ($relPath in $TargetRelativePaths) {
    $targetDirs = Get-ChildItem -Path $ProjectRoot -Recurse -Directory | 
        Where-Object { $_.FullName.Replace('\', '/').EndsWith($relPath) }
    
    if ($targetDirs.Count -eq 0) {
        Write-Host "未找到匹配的目标目录:$relPath"
        continue
    }

    # 拷贝文件到所有匹配的目录
    foreach ($dir in $targetDirs) {
        Write-Host "正在拷贝文件到:$($dir.FullName)"
        Copy-Item -Path $SourceFile -Destination $dir.FullName -Force
    }
}

Write-Host "所有文件分发操作完成"

脚本说明

  • 自适应根目录:默认将脚本执行时的当前工作目录作为Gradle项目根目录,也可以手动修改$ProjectRoot变量指定固定根目录,支持跨项目复用
  • 可扩展配置:目标路径统一存放在$TargetRelativePaths数组中,后续如果要新增/删除目标目录,只需要修改数组即可,不需要调整业务逻辑
  • 容错处理:增加了源文件存在性校验,找不到源文件时会直接抛出明确提示,避免无意义的遍历操作
  • 自动匹配目录:自动识别项目下所有符合目标相对路径的目录,不管项目有多少子模块,都能自动完成分发,不需要硬编码任何模块路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:27:02