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/