That's right, batch files are not directly executable and require a command processor to run them.
That said, solving the portability issue should be fairly straightforward, and can be done either at compile-time (via preprocessor macros) or run-time (Windows-specific environment variables? script filename extension?)
I'd probably go with the former as more robust.