🐚

goでビルドしたらexeを自動で指定フォルダにコピーする with PowerShell

2024/10/23に公開
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 に。

シンボリックリンクを作ったほうが早い?

https://shs.sh/

(まぁ、管理者権限に切り替えるのが難しい場面もあるので……)

Discussion