NAME which -- display full pathname for executable command SYNOPSIS which [options] [command ...] DESCRIPTION DOS uses the PATH environment variable to determine which directories to search when attempting to execute a program. For each command specified, which searches directories defined in PATH and prints the name of the first executable file that matches command. When /a or -a is specified on the command line, which returns all executables found in PATH that match the command name. If the option is /ad or /d, which prints 'detail' information, i.e., date and file size. When used with the 'WHICHDETAILS' environment variable, the details options (/ad and /d) act as a toggle, disabling detailed output for that execution. To cause which to print details by default, simply 'SET WHICHDETAILS=', where is anything you like. I use '1', as it is a single byte and saves valuable environment space. Feel free to use whatever you like, though; the only thing that's needed to make WHICHDETAILS work is for it to show up in the environment. Typically, one would not specify the file extension of a command to search for; doing so limits the search to that specific file name. In such a limited search, it's possible that which would return the name of an executable that is farther down the PATH than the actual file that is being executed. For example, if you have TEST.COM, TEST.EXE, and TEST.BAT all residing in the current directory, specifying TEST.BAT on the command line would cause which to report that TEST.BAT is being executed when, in fact, TEST.COM is the program being run. A better way is to simply search for TEST unless you really need to find an executable with a specific extension. In keeping with the execution order used by DOS, which displays COM files first, followed by EXE files, and then BAT files (for searches that do not have the extension specified). which searches the current directory before searching the directories defined in PATH. To take into consideration that which may be used on operating systems other than DOS -- or with command processors other than COMMAND.COM -- which checks for a list of program extensions in the PATHEXT environment variable. To use the PATHEXT environment variable, set the variable with the extentions you intend to use, each extension separated by a semi- colon. E.g.: SET PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH If PATHEXT is not specified in the environment, which defaults to the DOS-standard extensions of .COM, .EXE and .BAT. If PATHEXT is specified in the environment, which searches in the order the extensions are listed. If you're going to use this variable, be sure you understand the execution order of the command processor you are using. The example given above is taken from my own NT system -- with standard command processor and VB Script, Java Script and Windows Scripting Host installed. Your mileage may vary, so understand your command processor's execution order before adding PATHEXT to the environment. OPTIONS which accepts the following options: /? * --help Displays a short summary of how to use the program. When this switch is in the first position on the command line, which ignores all other command-line entries and displays help information /v * --version Displays version and licensing information. When this switch is in the first position on the command line, which ignores all other command-line entries and displays version information /a * -a Displays all executable files matching command that are found in PATH, rather than just the first match. This option cannot be used with other options /ad * -ad Displays all executable files matching command that are found in PATH, rather than just the first match. Includes file size and date information for the executable. This option cannot be used with other options /d * -d Displays first executable file matching command that is found in PATH. Includes file size and date information for the executable. This option cannot be used with other options NOTE: which checks for the switchar defined in DOS. If you have set a different switchar than the standard "/" character, which will honour your preferred setting. ENVIRONMENT VARIABLES which uses the following environment variables: PATH The list of directories to search for command PATHEXT The list of program extensions to check (optional) WHICHDETAILS Sets default behaviour to display file details (optional) DIAGNOSTICS Possible exit values are: 0 Success: -- An executable file matching command was found -- Help or version information was displayed 1 Failure due to the following: -- A matching executable file could not be found -- Invalid command-line option NOTE This command has no way of knowing about COMMAND.COM internal commands and, therefore, is unable to help you resolve such conflicts. Under DOS, COMMAND.COM executes internal commands before searching PATH to find the executable being called. If which is searching for multiple files and is able to locate one or more files, the exit value will be 0 even if other commands are not found. Only the first position on the command line is tested for options; all other entries will be treated as filenames. LIMITATIONS Technically not a bug (rather, a limitation of a 16-bit, real-mode DOS app), but which will not work correctly on partitions larger than 2 GB. So, if you want to use which on non-DOS systems, make sure you're looking for 8.3 filenames on a < 2GB partition with a PATH that doesn't contain any spaces or other funky characters. In other words, it's a DOS app. If you try to use which on, say, Windows Me with a 20-gig partition, you're outta luck. AUTHOR Trane Francks I prefer being contacted via e-mail; however, you can snail-mail me at: Trane Francks Sento Hills Tsurukawa #305 1856-4 Kanai-cho, Machida City Tokyo 195-0071 JAPAN DOS Extensions 20 March 2002