Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I've got a directory in my home folder in which I place command-line software (CMD_Software). I put each piece of software in its own directory within CMD_Software in order to avoid clutter.

I would like to make a single entry in my PATH variable that will allow access to CMD_Software and all directories it contains from the command line.

I tried C:\Users\myuser\CMD_Software\* but that did nothing. That's the point at which I ran out of ideas.

Please note that I'm not trying to set a new path while in the terminal, I'm trying to set a new path in the "Environment Variables" available on the "Advanced" tab of System Properties.

share|improve this question
    
Did you try something like `C:\Users\myuser\CMD_Software*`? –  terdon Mar 21 '13 at 16:18
2  
I don't think this is possible. –  Harry Johnston Mar 22 '13 at 2:22

4 Answers 4

The PATH variable does not support wildcards or recursion. This is by design.

There are two possible workarounds that I've used on occasion:

  • Create a directory with simple batch files and add that directory to the PATH. Each batch file can launch the program you want, for example:

    :: CMD_Software.bat: start CMD_Software
    @C:\Users\myuser\CMD_Software\CMD_Software.exe %*
    

    The first line is a comment, the second starts with @ to avoid showing the command being run, and %* is used to pass any command line arguments to the EXE.

  • Add aliases to CMD.EXE:

    DOSKEY CMD_Software="C:\Users\myuser\CMD_Software\CMD_Software.exe" $*
    

    This essentially translates CMD_Software in the command prompt to everything after the equal sign. The $* is replaced with the supplied arguments.

I prefer the second approach, because you can group all the aliases in a single file (see the "/MACROFILE" switch in DOSKEY /?) and have it autorun whenever the command interpreter starts using a registry setting (see "AutoRun" key in CMD /?).

A drawback of the second method is that aliases work only at the start of a command line. This can be a problem if you want to chain commands. For example, CLS & CMD_Software won't work unless you put the alias in a separate line using parentheses:

CLS & (
CMD_Software
)

Whenever this becomes a problem, I just fallback to the batch file approach.

share|improve this answer

If you're not too put off by the idea, you can copy your command line tools to the Windows\System32 directory. Then you can run them from any directory, just like ping or ipconfig.

edit
After a bit of tinkering around, this IS possible. You just need to use semicolons to delimit your directories. Say you had a program in "folder1" and "folder2". You'd write your path like this:

c:\folder1\;c:\folder2\;c:\folder3\;    etc....

Then you can call a program in either directory straight from the command line. AFAIK there is no other way to do this with just single line.

Supporting info: http://en.wikipedia.org/wiki/PATH_(variable)

share|improve this answer
    
This doesn't make a lot of sense. 1. This would erase any previous content of the PATH variable. 2. The PATH variable would only contain the folder, not its subdirectories (desired result). 3. Invoking program.bat as %PATH%\program.bat is more or less the opposite of what PATH is designed for. –  Dennis Mar 28 '13 at 0:07

Put a "programlinks\" subdirectory under ...\CMD_Software (or anywhere, actually) and fill it up with symbolic links or hardlinks to each executable you wish to access. Then a single entry in the PATH for ...\programlinks will suffice.

share|improve this answer

This is what I use to fix the problem. Copy this script below and save it as FIXPATH.BAT into the folder that you've added to the PATH environment variable. For instance:

C:\Users\myuser\CMD_Software\

Now whenever you need to run a program that's in a subfolder, say...

C:\Users\myuser\CMD_Software\unixutils\grep.exe
or
C:\Users\myuser\CMD_Software\imagetools\exiftool.exe

Run fixpath first then enter the command (e.g. grep or exiftool) like so:

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Users\myuser>fixpath
C:\Users\myuser>exiftool


FIXPATH.BAT

setlocal EnableDelayedExpansion
cd /D %~dp0

for /R %%d in (.) do (
    set "dirs=!dirs!;%%d"
)

path=%path%!dirs!
(endlocal
    set "ret=%PATH%"
)
cmd /K "title [#] Path Fixed [#] && path %ret%"
exit /B

Thanks to @VonC's answer

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.