views:

80

answers:

3

Trying to use the path to the current script, and the path contains spaces in it. I can't seem to get it to work though:

C:\Test Directory>dir
 Volume in drive C has no label.
 Volume Serial Number is 7486-CEE6

 Directory of C:\Test Directory

08/31/2010  07:28 PM    <DIR>          .
08/31/2010  07:28 PM    <DIR>          ..
08/31/2010  07:28 PM                20 echoit.cmd
08/31/2010  07:28 PM                94 test.cmd
               2 File(s)            114 bytes
               2 Dir(s)  344,141,197,312 bytes free

C:\Test Directory>type echoit.cmd
@echo off
echo %*

C:\Test Directory>type test.cmd
@echo off

for /f "tokens=*" %%a in ('%~dp0\echoit.cmd Hello World') do (
    echo %%a
)

C:\Test Directory>test
'C:\Test' is not recognized as an internal or external command,
operable program or batch file.

C:\Test Directory>
+1  A: 

Change test.cmd to the following:

   @echo off

   for /f "tokens=*" %%a in ('"%~dp0\echoit.cmd" Hello World') do (
    echo %%a
   )

You need to set the entire command, minus arguments, in quotes. The Windows command prompt treats a collection of words as a single command when the entire collection is quoted, that is why you must exclude the Hello World arguments. If you were to include that in the quotes, Windows would treat that as part of the command not as arguments.

linuxuser27
A: 

Have you tried adding quotes?

for /f "tokens=*" %%a in ('"%~dp0\echoit.cmd" Hello World') do (
    echo %%a
)
bde
A: 

how about using ~fs0, ie

C:\Test Directory>type test.cmd
@echo off

for /f "tokens=*" %%a in ('%~fs0\echoit.cmd Hello World') do (
 echo %%a
)

where %~fsI - expands %I to a full path name with short names only

Jason Jong