Reputation: 4944
I am trying to start a Java command line tool in its own cmd.exe window from Java. I use ProcessBuilder to start the following:
cmd.exe /k "C:\Program Files (x86)\JavaSoft\jre\1.5.0_07\bin\java.exe"
This works. This also works:
cmd.exe /k "C:\Program Files (x86)\JavaSoft\jre\1.5.0_07\bin\java.exe" -version
But when I try to run the following
cmd.exe /k "C:\Program Files (x86)\JavaSoft\jre\1.5.0_07\bin\java.exe" "test a"
I get an error saying it can't find "C:\Program". I expected to get an exception from java.exe. I need to be able to use quotation marks in some of the arguments. Is there any way to do this?
Upvotes: 0
Views: 1979
Reputation: 24909
From "cmd /?":
If all of the following conditions are met, then quote characters on the command line are preserved:
- no /S switch
- exactly two quote characters
- no special characters between the two quote characters, where special is one of: &<>()@^|
- there are one or more whitespace characters between the the two quote characters
- the string between the two quote characters is the name of an executable file.
- Otherwise, old behavior is to see if the first character is a quote character and if so, strip the leading character and remove the last quote character on the command line, preserving any text after the last quote character.
Okay, that explains why it doesn't work if there are more than two quotes. But that doesn't explain how exactly to solve the problem. Thankfully, Google has the answer:
cmd.exe /k ""d:\laj soft\java.exe" "test a""
Upvotes: 2
Reputation: 1932
You could try to use the old DOS trick for this one. Refer to Program Files as progra~1. This usually gets me around the problem.
Upvotes: 0
Reputation: 7873
If you have control over where your JDK is installed, its a good idea to install it in a location that does not contain spaces. "Program Files" is the default location on Windows but it almost always leads to problems.
Upvotes: 0