如何用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
相关产品推荐
相关产品推荐

