Differences
This shows you the differences between the selected revisions of the page.
| 2014-10-24 | 2014-11-06 | ||
| typo (martin) | we can now simply test file existence in scripting using stat command (martin) | ||
| Line 405: | Line 405: | ||
| ~~AD~~ | ~~AD~~ | ||
| - | === [[scripting]] Using WinSCP Scripting and XML Logging from JScript === | + | === [[scripting]] Using WinSCP Scripting === |
| - | You may use following [[guide_automation_advanced#wsh|Windows script host JScript code]] (''example.js''): | + | You can use a ''[[scriptcommand_stat|stat]]'' command in ''[[scriptcommand_option|option batch abort]]'' mode to query file attributes. If the file does not exist, the ''stat'' command fails and so does the script. Then, [[scripting#checking_results|test WinSCP exit code]] to determine, if the file exists or not. |
| - | <code javascript> | + | <code batch> |
| - | // Configuration | + | @echo off |
| - | + | ||
| - | // Remote file search for | + | |
| - | var FILEPATH = "/home/user/myfile.dat"; | + | |
| - | // 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 p = FILEPATH.lastIndexOf('/'); | + | |
| - | var path = FILEPATH.substring(0, p); | + | |
| - | var filename = FILEPATH.substring(p + 1); | + | |
| - | var exec; | + | set REMOTE_PATH=/home/user/test.txt |
| - | + | winscp.com /command "option batch abort" "open mysession" "stat %REMOTE_PATH%" "exit" | |
| - | // run winscp to check for file existence | + | |
| - | exec = shell.Exec("\"" + WINSCP + "\" /xmllog=\"" + logfilepath + "\""); | + | |
| - | exec.StdIn.Write( | + | |
| - | ···"option batch abort\n" + | + | |
| - | ····"open \"" + SESSION + "\"\n" + | + | |
| - | ····"ls \"" + path + "\"\n" + | + | |
| - | ····"exit\n"); | + | |
| - | + | ||
| - | // wait until it finishes and collect its output | + | |
| - | var output = exec.StdOut.ReadAll(); | + | |
| - | // optionally print the output | + | |
| - | WScript.Echo(output); | + | |
| - | + | ||
| - | if (exec.ExitCode != 0) | + | |
| - | { | + | |
| - | WScript.Echo("Error checking for file existence"); | + | |
| - | 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/w:filename[@value='" + filename + "']"); | + | |
| - | + | ||
| - | if (nodes.length > 0) | + | |
| - | { | + | |
| - | WScript.Echo("File found"); | + | |
| - | // signalize file existence to calling process; | + | |
| - | // you can also continue with processing (e.g. downloading the file) | + | |
| - | // directly from the script here | + | |
| - | WScript.Quit(0); | + | |
| - | } | + | |
| - | else | + | |
| - | { | + | |
| - | WScript.Echo("File not found"); | + | |
| - | WScript.Quit(1); | + | |
| - | } | + | |
| - | </code> | + | |
| - | Run the script with command: | ||
| - | <code batch> | ||
| - | cscript /nologo example.js | ||
| - | </code> | ||
| - | |||
| - | Following batch file shows how to continue with processing based on file existence: | ||
| - | <code batch> | ||
| - | cscript /nologo example.js | ||
| if errorlevel 1 goto error | if errorlevel 1 goto error | ||
| - | echo File exists, do something | + | echo File %REMOTE_PATH% exists |
| rem Do something | rem Do something | ||
| exit 0 | exit 0 | ||
| :error | :error | ||
| - | echo Error or file not exists | + | echo Error or file %REMOTE_PATH% not exists |
| exit 1 | exit 1 | ||
| </code> | </code> | ||
| - | |||
| - | Alternatively you can continue with the processing directly in JScript code as suggested by respective comments. | ||
| ==== [[local]] Local file existence ==== | ==== [[local]] Local file existence ==== | ||