Chapter 14

バッチファイルでサブコマンド

zetamatta
zetamatta
2020.10.19に更新

call :"%~1" のように、ラベル名を二重引用符で囲むと、サブコマンド名が渡されなかった時も処理できます( :"" というラベルとなるから)

以下は、nmake.exe も mingw32-make.exe もない環境で、簡易Makefileとして make.cmd というバッチファイルを作った例。

  • make , make all , make package , make upgrade などのように呼び出せる。
  • ファイルの新旧比較は go コマンドがやってくれるので、本当の make がなくても簡易的なものであればバッチファイルで用が足りますね。
setlocal
call :"%~1"
endlocal
exit /b

:""
:"all"
    go fmt
    for %%I in (386 amd64) do (
        set GOARCH=%%I
        if not exist cmd\%%I mkdir cmd\%%I
        go build -o cmd\%%I\findo.exe -ldflags "-s -w"
    )
    exit /b

:"package"
    for %%I in (386 amd64) do zip -j findo-%%I-%DATE:/=%.zip cmd\%%I\findo.exe
    exit /b

:"upgrade"
    for /F %%I in ('where findo') do copy /-Y findo.exe "%%I"
    exit /b