executescripttext with file name

Hi,

I am working on some cross platform issues integrating with Python.

I am using (or attempting to use) ExecuteScriptText to run a shell script on the Mac and a bat file on Windows

On the Mac I create a string:

Do shell script "'fullpath/to/file.sh'" with single quotes to accommodate 

On Windows I use parsefilepath(5,thelocation,"\\",0,0) to define the file path but am running into trouble.

The file path  is "C:Users\andy.hegedus\Desktop\Texture Classifier\Run_Python.bat" as the string.

Do I have to worry that the slashes are being interpreted as escape codes such as the \R into the operation, ExecuteTextScript or will it be interpreted as a legal file path?

Andy

Here is a snippet of code that I used LONG ago for creating and running batch files. Not sure if this is helpful, but it did work for me. There are likely built-in functions that can replace the ugly path conversion functions.

function DL_SendToWeb(S_filelist)
    string S_filelist
    // files must be on disk at LoggerPath
    // uses external scp program to transfer files
    // Runs in the background. uses ssh user key.  
   
    wave /T configTxt=root:Packages:RS232Logger:configTxt
     
    string s_filename
    variable refnum, numfiles=0
    do
        s_filename = StringFromList(numfiles, S_filelist)
        if (strlen(s_filename)==0)
            break
        endif
        refnum=0
        open /Z /R/P=LoggerPath refnum as s_filename // s_filename is changed here
        if (V_flag==0) // file exists
            close refnum
            numfiles+=1
        else
            S_filelist=RemoveListItem(numfiles,S_filelist)
        endif
        // need to check that this always works as planned...
    while(1)
   
    if (numfiles <1)
        return 0
    endif
       
   
    PathInfo LoggerPath
    string batPath=DL_MacPath2WinPath(S_path)
    string cmd
    string UnixPathStr=DL_MacPath2ForwardSlashPath(S_Path)
   
    // create a new batch file
    string s_batname
    variable i=1, maxbats=10
    refnum=0
    do
        sprintf s_batname, "uploader%d.bat", i
        open /Z /P=LoggerPath refnum as s_batname      
        if (refnum) // file is open
            break
        endif
        i+=1
    while (i<=maxbats)
   
    if (i>maxbats)
        printf "%s   %s   ERROR: File upload failed - too many unwriteable batch files\r", date(), time()
        return 0
    endif
       
    // write to the batch file 
   
    // pscp usage:
    // pscp [options] source [source...] [user@]host:target
   
    // pscp [options]
    fprintf refnum, "\"%s\" %s", DL_MacPath2WinPath(ConfigTxt[%scpPathStr]), ConfigTxt[%scpFlags]
    // source [source...]
    for (i=0;i<numfiles;i+=1)
        fprintf refnum, " \"%s%s\"", UnixPathStr, StringFromList(i, S_filelist)
    endfor
    // [user@]host:target
    fprintf refnum, " %s\r\n", ConfigTxt[%ServerAddress]   
    fprintf refnum, "attrib -R %0\r\n" // make THIS batch file writeable
    fprintf refnum, "exit\r\n"
    close refnum
   
    SetFileFolderInfo /Z/RO batPath+s_batname  // make bat file read only so that we don't overwrite it before it has executed
   
    // the batch file is invoked using start so that we don't have to wait for completion
    sprintf cmd, "cmd.exe /C start \"\" /min \"%s%s\" ", batPath, s_batname
    ExecuteScriptText /W=0.5 /B/Z cmd
   
    if (V_flag)
        printf "%s   %s   ERROR: File upload failed at ExecuteScriptText\r", date(), time()
    endif
    return 1
end
// converts C:Program Files:Wavemetrics: to C:\\Program Files\\Wavemetrics\\
// double backslashes are needed when building commands as strings
function /T DL_MacPath2WinPath(str)
    string str
    variable i=3
    str[1,1]=":\\"
    do
        if (stringmatch (str[i], ":"))
            str[i,i]="\\"
        endif
        i+=1   
    while(i<strlen(str))
    return str
end

function /T DL_MacPath2ForwardSlashPath(str)
    string str
    variable i=3
    str[1,1]=":/"
    do
        if (stringmatch (str[i], ":"))
            str[i,i]="/"
        endif
        i+=1   
    while(i<strlen(str))
    return str
end

 

Andy,

I haven't used "ExecuteScriptText" for quite some time, so relying on the help file it looks like you need to escape the backslashes in the file path:

When calling a batch file or other non-*.exe file, supply the full path. If the path (or file name) contains spaces, you must quote the path:
ExecuteScriptText "\"C:\\Program Files\\my.bat\""
The outer double-quotes are consumed by ExecuteScriptText. The inner double quotes, represented by the \" escape sequence, remain in the command passed to the operating system.
 

I thought there was a function to convert a path to the escaped version, but could not find such a thing.  You could try "ReplaceString" to replace a single backslash with a double backslash.

ReplaceString("\", thelocation, "\\")