🐚
goでビルドしたらexeを自動で指定フォルダにコピーする with PowerShell
build.ps1
go build
if ($LASTEXITCODE -eq 0) {
if (Test-Path .\.env) {
$d = (Get-Content .\.env -Raw).Trim()
$d = [System.Environment]::ExpandEnvironmentVariables($d)
if (-not (Test-Path $d -PathType Container)) {
New-Item -Path $d -ItemType Directory
}
$m = (Get-Content "go.mod" | Select-Object -First 1) -replace "^module "
$n = "{0}.exe" -f ($m -split "/" | Select-Object -Last 1)
if (Test-Path $n) {
Get-Item $n | Copy-Item -Destination $d -Force
"COPIED {0} to: {1}" -f $n, $d | Write-Host -ForegroundColor Blue
}
else {
"{0} not found!" -f $n | Write-Host -ForegroundColor Magenta
}
}
else {
".env not found!" | Write-Host -ForegroundColor Magenta
}
}
else {
"Failed to build. Nothing was copied." | Write-Host -ForegroundColor Magenta
}
使い方:
# .env には指定フォルダのパスを記入しておく
cat .\.env
C:\Users\%USERNAME%\Personal\tools\bin
.\build.ps1
-
go build
を実行して、エラーがなければ.env
に書いておいたパスに exe をコピーしています。 - Early return してもいいのかもしれません……が、
exit
でもreturn
でも変わらないというのが落ち着かないのでif...else
に。
シンボリックリンクを作ったほうが早い?
(まぁ、管理者権限に切り替えるのが難しい場面もあるので……)
Discussion