I need to update some configuration files on users PCs now and then, and I want to do it automatically. In the past I've created temporary .bat files and executed them with open(). Now I'm trying to use runprogram to do the same thing but it's not working. I think I'm almost there - any help is greatly appreciated.
Here's my program:
old_file = "C:\some directory\file1.ext";
new_file = "Z:\zdrive folder\file1.ext";
d1 = last modification date(old_file);
d2 = last modification date(new_file);
if (d1 != d1,
options_list = evallist({"copy", "/y", evalinsert("\["^new_file^"]\"), evalinsert("\["^old_file^"]\")});
status = runprogram(executable("cmd.exe"), options(options_list), readfunction("text"));
);If the dates are not identical it puts double quotes around each filename path and executes a copy/y in a DOS shell. I'm running Windows 7 btw. I ran the string in a DOS window and it copied the file no problem.
There is actually a JSL function (Copy File) that will do this for you.
If you prefer to use RunPogram, you will need to include the copy command with the path to the two files within a single string option. I also needed to include the "/c" option in order to carry out the command before terminating.
Names Default To Here( 1 );
old_file = "C:\some directory\file1.ext";
new_file = "Z:\zdrive folder\file1.ext";
d1 = last modification date(old_file);
d2 = last modification date(new_file);
if (d1 != d1,
command_string = "/c copy" || new_file || " " || old_file;
status = RunProgram(
Executable( "CMD.EXE" ),
Options( {"/y", command_string} ),
ReadFunction( "text" )
);
);
There is actually a JSL function (Copy File) that will do this for you.
If you prefer to use RunPogram, you will need to include the copy command with the path to the two files within a single string option. I also needed to include the "/c" option in order to carry out the command before terminating.
Names Default To Here( 1 );
old_file = "C:\some directory\file1.ext";
new_file = "Z:\zdrive folder\file1.ext";
d1 = last modification date(old_file);
d2 = last modification date(new_file);
if (d1 != d1,
command_string = "/c copy" || new_file || " " || old_file;
status = RunProgram(
Executable( "CMD.EXE" ),
Options( {"/y", command_string} ),
ReadFunction( "text" )
);
);
A little more information here , which explains dir and copy are built in to the cmd.exe interpreter.
Thanks Justin and Craige. I think I'll use copy file as that's a more straightforward solution. But it's good to know how to use runprogram with builtin DOS commands.
A few notes on copy file(from-file, to-file):
So, copy file rules the day! Thanks again.