FYI, under MSYS2's Porting documentation: You may need to use platform checks to switch between behaviour suited for MSYS2 and the default one. Some useful identifiers:
Identifier Platform(s) Usage
_WIN32 mingw, msvc C code (#ifdef ...)
_WIN64 64-bit mingw, 64-bit msvc C code (#ifdef ...)
__CYGWIN__ msys2, cygwin C code (#ifdef ...)
__MSYS__ msys2 C code (#ifdef ...)
x86_64-pc-msys2 64-bit msys2 Build scripts (if [ $host = '...' ])
i686-pc-msys2 32-bit msys2 Build scripts (if [ $host = '...' ])
x86_64-w64-mingw32 64-bit mingw Build scripts (if [ $host = '...' ])
i686-w64-mingw32 32-bit mingw Build scripts (if [ $host = '...' ])
cygwin msys2 Python (sys.platform)
win32 mingw Python (sys.platform)
from which I'd guess that the x86_64-w64-mingw32 versions are there to help cross compiling build scripts. Now my understanding of MSYS2 bash is that while it will handle .sh and .bash scripts, .bat scripts are just passed to Windows cmd.exe which can find xcopy, but does not have a native version of strip or zip. You could parameterize update.bat's usage of them and use it via a .sh script that through 2 additional arguments tells cmd.exe where to find them (which is what I've done), or you might copy C:\msys64\ucrt64\bin\strip.exe and C:\msys64\usr\bin\zip.exe into the C:\Windows\System32\ folder so that cmd.exe can naturally find them.