esac
esac

Reputation: 24685

How to handle spaces in path names in for loop?

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>

Upvotes: 1

Views: 11382

Answers (3)

Jason Jong
Jason Jong

Reputation: 4330

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

Upvotes: 0

linuxuser27
linuxuser27

Reputation: 7353

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.

Upvotes: 2

WildCrustacean
WildCrustacean

Reputation: 5966

Have you tried adding quotes?

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

Upvotes: 0

Related Questions