X-Spam-Check-By: sourceware.org Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Subject: RE: Bash fails to run .bat file with spaces in pathname and argument Date: Fri, 13 Oct 2006 09:05:15 -0400 Message-ID: <31DDB7BE4BF41D4888D41709C476B65704169190@NIHCESMLBX5.nih.gov> In-Reply-To: <31DDB7BE4BF41D4888D41709C476B6570416918D@NIHCESMLBX5.nih.gov> From: "Buchbinder, Barry \(NIH/NIAID\) [E]" To: X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Note-from-DJ: This may be spam Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id k9DD5YCd030072 Buchbinder, Barry (NIH/NIAID) wrote: > * Johnathon Jamison (Wed, 11 Oct 2006 14:11:12 -0700) >> I am having some funny behavior. If I have a .bat file that is in a >> directory whose pathname contains a space, and an argument is given >> to the .bat file that has a space in it, then the .bat file fails to >> run. Instead, I get "'xxx' is not recognized as an internal or >> external command, operable program or batch file." where xxx is the >> portion of the complete path to the .bat file before the first space. >> >> I am not sure why this is occurring. Any help would be appreciated. >> I have more specific information and a sample run below. If I have >> left anything out, just ask. In particular, I am not sure which >> version numbers would be needed, or where to find (many of) them. > > The problem is, at least in part, with cmd. cmd /? says: > > If /C or /K is specified, then the remainder of the command line > after the switch is processed as a command line, where the > following logic is used to process quote (") characters: > > 1. 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. > > 2. 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. > Try using short names to get rid of the first set of quotes. Short > names still work, at least on XP. Compare c:\>dir docume~1 > and > c:\>dir "Documents and Settings" > > To find out the short names, > c:\>dir /x > Or one can guess (first 6 characters + "~" + "1", or a higher digit > if the 6 characters + "~1" is already used, + "." + first 3 > characters of the extension). > > Try changing the batch file from > echo %1 > to > echo %1 %2 %3 %4 %5 %6 %7 %8 %9 > That should work by getting rid of the second set of quotes, at least > if the number of arguments is less than 10. > > This, also, works > > /c> echo '"c:\Documents and Settings\BBuchbinder\test.bat" "hello > world" exit' | u2d | cmd /k > c:\>"c:\Documents and Settings\BBuchbinder\test.bat" "hello world" > > c:\>echo "hello world" > "hello world" > > c:\>exit > > You can leave off the "/k", but you then get extraneous text from > cmd.exe as it loads. I forgot to include cd-ing into the directory with spaces, though it does not work as I would expect /c> cd '/c/Documents and Settings' /c/Documents and Settings/BBuchbinder> cmd /c test Hello World c:\Documents and Settings\BBuchbinder>echo Hello Hello That was expected; the following is not. /c/Documents and Settings/BBuchbinder> cmd /c test "Hello World" c:\Documents and Settings\BBuchbinder>echo "Hello World" "Hello World" Shouldn't the double quotes be stripped off before cmd sees them? /c/Documents and Settings/BBuchbinder> cmd /c test '"Hello World"' c:\Documents and Settings\BBuchbinder>echo "\"Hello "\"Hello Why is the backslash being inserted to quote the second double quote and why is the single quote being changed into a double quote? (Not that I really care.) -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/