If arguments contain spaces exec will quote the argument before passing it on (some testing shows that it is actually a bit more involved than this). So {c:\Documents and Settings} will be changed to "c:\Documents and Settings". However, sometimes you want to force this quoting of an argument. One example I have encountered is when passing parameters to a batch file that contain comma's: test.bat a,b will call test.bat with two parameters a and b. This can be very useful, but leads to problems when you want to send a,b as one parameter. The solution is to quote the a,b test.bat "a,b" If we want to call this batchfile from Tcl, the first idea would be to use exec test.bat {"a,b"} but here exec will quote this to: test.bat \"a,b\" Instead the << argument to exec can be used in combination with cmd.exe. << will pipe the remaining args to the stdin of the program. So exec cmd << "test.bat \"a,b\"\n" ; # note the trailing \n will lead to the desired effect.