Because Windows programs may not necessarily be executable and numerous extensions for scripts exist on Windows e.g. .vbs etc. .bat file are not searched by find_program() unless explicitly specified as in this example. If a script (say a Bash script) exists with the same name, find_program() may find that first on Windows, even if the script wouldn't work on Windows.
If you know a program publishes both a non-Windows script without filename suffix and with a .bat suffix, it's best to be specific for Windows with the filename including suffix as in this example.
Reveal the search behavior with:
cmake -Bbuild --fresh --debug-find-var=scr