If you ask me, exit codes in batch files are broken for this exact reason, but there is a hacky workaround you can use. As the last line of your batch file, use:
@%COMSPEC% /C exit 1 >nul
Since this is an actual process that is started you get a real process exit code and && and || will work.