What the Shell is wrong here?

Richard K. Herz herz at ucsd.edu
Wed May 21 12:31:01 EDT 2003


Below is what I got to work on Win 98 and XP with MC/Rev shell() for paths
with spaces.

Rich Herz
herz at ucsd.edu
www.ReactorLab.net

Things differ between command.com (default on Win 98) and cmd.exe (default
on Win XP).  XP also has command.com but its features on XP differ somewhat
from those on Win 98.  Check MC global shellCommand value to find out
which is active.  For both, the MC shell("xxx") requires quotes around the
entire single input parameter xxx.  In both examples below tWinPath is a
path that can contain spaces.

FOR COMMAND.COM (default on Win 98)

Command.com requires quotes around paths with spaces in them.  I write a
batch file and do "cd" with quotes around path followed by a command in
batch file to execute myApp.exe file and finally have MC shell() execute the
batch file. The command continuation character in command.com is | but it
doesn't help because you need quotes around entire MC shell() input AND
around path for "cd"

put "C:\temp_mc.bat" into tBatPath
put "file:" & tBatPath into tBatUrl
put "cd" && quote & tWinPath & quote into temp
put cr & "myApp.exe" & cr after temp
try
  put temp into url tBatUrl
  catch errornum
  answer "Error: can't write command file to C:\ and so can't run!"
  exit to metacard
end try

put "get shell(" & quote & "start" && tBatPath & quote & ")" into
todo

do todo
if there is a file tBatPath then delete file tBatPath

FOR CMD.EXE (default on Win XP)

Cmd.exe can handle spaces in path names and you can put more than one
command into a single shell() using the cmd.exe continuation character &
(see the & just before the word start below).  Here is code to cd to a
directory and then start an executable.  I guess one could do this with only
start and then full path to executable but I stopped coding when I got
things working:

put "get shell(" & quote & "cd" && tWinPath & "& start myApp.exe" & quote &
")" into todo

do todo





More information about the use-livecode mailing list