When writing windows batch files it is sometimes necessary to check if a program is installed on user system before going further. The following snippet checks if a program is executable from .bat file, because it is present in current directory of somewhere along %PATH%.
@echo off
svn >nul 2>nul
if %ERRORLEVEL% neq 9009 goto continue
echo Subversion "svn" command not found. Exiting..
exit 1
:continue
>nul 2>nul system suffix redirects output from program (if exists) or from system to nowhere to keep users calm.
>nul works for usual output,
2>nul redirects
error output. Just make sure that the command you test exits immediately and doesn't hang asking user for input, because user won't see the prompt.
Note about App Paths in batches
Sometimes you'll be surprised to see that your program is executable from your
file manager, but fails to run from batch file. This is true, for example, for
Far Manager and default installation of
Python 2.5. This happens because application is not present in %PATH%, but instead added to registry key
App Paths. Batch files are executed by cmd.exe which doesn't check registry (i.e. it uses
CreateProcess() system call). File managers usually capable to run such programs by using higher level function
ShellExecute(). Look
here for more info if you're interested to know how
ShellExecute() uses
App Paths.
Seems like there is no elegant workaround to silently detect from batch file if your application is available on target system if it installed using
App Paths key (like Python). There is
start command that can be used to execute commands with
ShellExecute(), but when command is not found
start displays popup dialog with error message, which is impossible to hide. If you are forced to deal with such application you can create additional/custom .vbs script that calls
ShellExecute() and processes errors.