Note that the documentation covers new features and changes in beta releases 4.2 through 4.2.4 already.

Downloading the most recent file

You may use following Windows script host JavaScript code (example.js):

// Configuration
 
// Local path to download to (keep trailing slash)
var LOCALPATH = "c:\\downloaded\\";
// Remote path to search in (keep trailing slash)
var REMOTEPATH = "/home/user/";
// Mask of files to search for
var FILEMASK = "*.*";
// Session to connect to
var SESSION = "session";
// Path to winscp.com
var WINSCP = "c:\\program files\\winscp\\winscp.com";
 
var filesys = WScript.CreateObject("Scripting.FileSystemObject");
var shell = WScript.CreateObject("WScript.Shell");
   
var logfilepath = filesys.GetSpecialFolder(2) + "\\" + filesys.GetTempName() + ".xml";
 
var exec;
 
// run winscp to get list of file in the remote directory into XML log
exec = shell.Exec("\"" + WINSCP + "\" /log=\"" + logfilepath + "\"");
exec.StdIn.Write(
    "option batch abort\n" +
    "open \"" + SESSION + "\"\n" +
    "ls \"" + REMOTEPATH + FILEMASK + "\"\n" +
    "exit\n");
 
// wait until the script finishes
while (!exec.StdOut.AtEndOfStream)
{
    WScript.Echo(exec.StdOut.ReadAll());
}
 
if (exec.ExitCode != 0)
{
    WScript.Echo("Error retrieving list of files");
    WScript.Quit(1);
}
 
// look for log file
var logfile = filesys.GetFile(logfilepath);
 
if (logfile == null)
{
    WScript.Echo("Cannot find log file");
    WScript.Quit(1);
}
 
// parse XML log file
var doc = new ActiveXObject("MSXML2.DOMDocument");
doc.async = false;
doc.load(logfilepath);
 
doc.setProperty("SelectionNamespaces", 
    "xmlns:w='http://winscp.net/schema/session/1.0'");
 
var nodes = doc.selectNodes("//w:file");
 
// find the latest file
var filenameLatest = null;
var modificationLatest = null;
for (var i = 0; i < nodes.length; ++i)
{
    var filename = nodes[i].selectSingleNode("w:filename/@value");
    var modification = nodes[i].selectSingleNode("w:modification/@value");
    if ((filename != null) &&
        (filename.value != ".") &&
        (filename.value != "..") &&
        (modification != null))
    {
        // can compare timestamps stringwise
        if ((modificationLatest == null) ||
            (modificationLatest < modification.value))
        {
            modificationLatest = modification.value;
            filenameLatest = filename.value;
        }
    }
}
 
// no file in the log
if (filenameLatest == null)
{
    WScript.Echo("No file found");
    WScript.Quit(0);
}
 
// run winscp to download the latest file
exec = shell.Exec("\"" + WINSCP + "\"");
exec.StdIn.Write(
    "option batch abort\n" +
    "option confirm off\n" +
    "open \"" + session + "\"\n" +
    "get \"" + REMOTEPATH + filenameLatest + "\" \"" + LOCALPATH + "\"\n" +
    "exit\n");
 
// wait until the script finishes
while (!exec.StdOut.AtEndOfStream)
{
    WScript.Echo(exec.StdOut.ReadAll());
}
 
if (exec.ExitCode != 0)
{
    WScript.Echo("Error downloading " + filenameLatest);
    WScript.Quit(1);
}

Run the script with command:

cscript /nologo example.js

Further Reading

 
  scripts.txt · Last modified: 12 Sep 2009 by prikryl
 

Search

This page

Donate

Donate via PayPal

Associations

Site design by Black Gate