Commenter teo complained that
the runas
command requires its command line to be quoted.
Well, if you think about it, why single out runas
?
Pretty much all programs require their command line to be quoted
if they contain special characters (like spaces that you want to be
interpreted as part of a file name instead of as an argument separator).
The runas
command is just doing things the way everybody else
does.
Recall that on Windows, programs perform their own command line parsing. This isn't unix where the command shell does the work of parsing quotation marks and globs before handing the (now-partly-parsed) command line to the child process. Mind you, most programs do not do their own custom parsing; they rely on the C runtime library to do the parsing into arguments.
Okay, but let's single out the runas
command anyway,
because runas
does live in a slightly different world.
It is a convention dating back to
MS-DOS that programs which accept a command line
as an argument do so without requiring quoting.
The archetypal example of this is the command processor itself.
Whatever you pass after the /C
flag is treated as the
command line to execute.
Once the /C
is encountered, parsing stops and everything
from there to the end of the raw command line is treated as the argument.
(It also imposes the requirement that /C
be the last
parameter on the command line.)
(Note also that there is a special weirdo rule in the cmd.exe
parser with respect to the /C
and /K
switches;
see cmd /?
for details.)
(Therefore, if you want a program that forwards its command line to another program, the way to do this is not to parse your command line and then try to unparse it but rather to just forward the original command line.)
The authors of the runas
program appeared not to be
aware of this historical convention at the time they wrote it.
They just used the regular C runtime library command line parser,
unaware that "programs which accept a command line on the command line"
fall into a special alternate reality.
Hence the need for the double-extra-quoting.
Back when the runas
program was being developed,
I pointed out this historical alternate reality to the people
responsible for the runas
program.
They took my remarks under advisement but evidently chose to stick
with the "standard" parsing rules rather than entering the
little-known alternate reality.
(As a consolation prize, they did add some examples at the end of the
runas /?
output to explain how quotation marks should
be used.)