A good while ago
, I discussed how the
idiosyncratic command-line parsing rules in
can hurt code which
uses C runtime APIs such as
and how to soothe the pain using mildly counterintuitive, yet
simple quoting rules:
- Quote the command
- Quote all arguments
- If both the command and at least one of the arguments contain blank
characters, quote the whole command line as well.
This works for almost all situations except if you use
C:\>start /b "c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\uuidgen"
Try the above in a command prompt (everything in one line!):
"The system cannot find the file -ofoobar.txt".
When asking for syntax help (
), we get:
Starts a separate window to run a specified program or command.
START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/AFFINITY <hex affinity>] [/WAIT] [/B] [command/program]
"title" Title to display in window title bar.
Note the optional title
argument and how it can create a syntactical ambiguity.
In "start some command
", which part of the command line is the title and
which is the command? This may or may not be the reason why
command names which contain blank characters - but the optional title argument
also provides the workaround for the problem:
C:\>start "eureka" /b "c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\uuidgen"
In fact, an empty title string will do just as well:
C:\>start "" /b "c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\uuidgen"
The above example is a little contrived - but the problem is real; recently,
it affected some customers
when we changed installation paths for our products at CoCreate.
Previous month: Click here