How do I escape spaces in command line in Windows without using quotation marks?
It almost all works for me, but have you perhaps tried line5.. escaping the space with a caret symbol (^)
1 C:\Documents and Settings\user>cd ..
2 C:\Documents and Settings>cd ..
3 C:\>cd Documents and Settings
4 C:\Documents and Settings>cd..
5 C:\>cd Documents^ and^ Settings
6 C:\Documents and Settings>cd..
7 C:\>cd C:\documents and settings
8 C:\Documents and Settings>cd..
9 C:\>
Or e.g. below where the caret really makes all the difference.
Looks from below like the caret symbol may be your answer, see line 3 below.
1 C:\>"c:\Documents and Settings\a.bat"
gaga
2 C:\>c:\Documents and Settings\a.bat
'c:\Documents' is not recognized as an internal or external command,
operable program or batch file.
3 C:\>c:\Documents^ and^ Settings\a.bat
gaga
C:\>
I found that putting quotes around just one part of the location works. In your case:
SVN add C:\"Documents and Settings"\username\svn\*.*
Although this uses quotation marks, the important thing to notice is that the asterisks are outside the quotation marks, so they still function correctly.
Despite the answers giving the illusion that it works, the fact is you can't sneak in spaces into usual cmd arguments. This is easy to prove:
Save "
echo %1
" astest.bat
. This batch file will output the first argument which cmd passes us.Now, try and run
test.bat
, setting the value of%1
tofoo bar
. (Note that there's a space char betweenfoo
andbar
.)Trial-and-error for a few years and realize that there's no way to do it. Folks will suggest to escape using
^
, yettest.bat foo^ bar
will not outputfoo bar
.
So, there's no way to get the output foo bar
, and the closest we can get is running test.bat foo" "bar
which produces foo" "bar
, or running test.bat "foo bar"
which produces "foo bar"
.
Now, the reason the other answers appear to work is because cd
does it's own additional parsing, diverging from the behavior of usual argument passing (the usual %1
, %2
, %3
and etc in typical batch files).
For example, consider the peculiar command:
cd c:\documents and settings \some folder with spaces
Why does it work? This is due to cd
itself doing something equivalent of joining the 7 usual arguments into one logical one. According to cmd argument passing norms, we see 7 arguments:
c:\documents
and
settings
\some
folder
with
spaces
It's as though cd
has joined all the 7 arguments into one logical one, doing something akin to array.join(" ")
, which produces the path:
c:\documents and settings \some folder with spaces
Note that this behavior is peculiar to cd
only (and some other functions). It has nothing to do with usual argument passing.
Indeed, cd
has another peculiarity. Remember we stated above that we couldn't get the output foo bar
? The closest output we can get is by running:
test.bat foo" "bar
which produces foo" "bar
, or:
test.bat "foo bar"
which produces "foo bar"
, or:
test.bat "foo "bar
which produces "foo "bar
, or:
test.bat foo" bar"
which produces foo" bar"
, or:
test.bat "foo b"ar
which produces "foo b"ar
, or:
test.bat fo"o bar"
which produces fo"o bar"
, or:
test.bat fo"o ba"r
which produces fo"o ba"r
, or:
test.bat "fo"o" bar"
which produces "fo"o" bar"
, or:
test.bat "f""o""o"" ""b""a""r":
which produces "f""o""o"" ""b""a""r"
, or even:
test.bat """"f"""o""""o"" ""ba"""r"""""""""":
which produces """"f"""o""""o"" ""ba"""r""""""""""
.
All the above examples have one similarity, which is they'll produce foo bar
after we trim off the "
chars. cd
's author must have realized this too... if we were to infer from cd
's peculiar behavior which trims off all "
it receives, allowing all of these commands to work:
cd c:\documents and settings
cd "c:\documents and settings"
cd "c:"\"documents and settings"
cd c:\"documents" "and" "settings"
cd c:\"docu"ments an"d set"tings"
cd c:"\"docu"ments an"d set"ti"""ngs
cd "c"":""\"docu"ments an"d set"ti"""ngs
cd "c"":""\"do""cu"me"nts a"n""d set"ti"""ngs
cd c"""":""""\"""d"""oc""""u"me"""""nt"s a"n""d set"""""""ti""""ngs
The short-filename appears to work like a breeze.
"E:\Progra~1\Java\Eclipse\eclipse.exe" -vmargs -Xms1024m -Xmx2048m
For boosting up the memory.. ;)