我有一個非常簡單的腳本,它引導WinSCP並檢查以「TSA」開頭的文件的目錄。如果文件存在,它將退出,如果它不存在,它將通過一個新文件進行傳輸。腳本在Win 7上運行,不在Server 2003上
它啓動並運行在我的Windows 7機器上,這是我創建它的地方 - 但是當我將它傳輸到我的服務器[Windows Server 2003]時,它從來沒有找到該文件。
我的腳本:
var FILEPATH = "../zfinance/TSA";
// Session to connect to
var SESSION = "[email protected]";
// 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;
// run winscp to check for file existence
exec = shell.Exec("\"" + WINSCP + "\" /log=\"" + logfilepath + "\"");
exec.StdIn.Write(
"option batch abort\n" +
"open \"" + SESSION + "\"\n" +
"ls \"" + path + "\"\n" +
"exit\n");
// wait until the script finishes
while (exec.Status == 0)
{
WScript.Sleep(100);
WScript.Echo(exec.StdOut.ReadAll());
}
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'");
doc.setProperty("SelectionLanguage", "XPath");
var nodes = doc.selectNodes("//w:file/w:filename[starts-with(@value, '" + filename + "')]");
if (nodes.length > 0)
{
WScript.Echo("File found");
WScript.Quit(0);
}
else
{
WScript.Echo("File not found");
WScript.Quit(1);
}
經過大量調查後,我想我已經找到了一段代碼,不能正常工作:
// parse XML log file
var doc = new ActiveXObject("MSXML2.DOMDocument.6.0");
doc.async = false;
doc.load(logfilepath);
doc.setProperty("SelectionNamespaces",
"xmlns:w='http://winscp.net/schema/session/1.0'");
唯一的問題是,我不知道爲什麼。此時的日誌文件應該使用xml代碼寫入,但這不會發生。
在此先感謝您的幫助。
我打開註冊表並搜索「MSXML2.DOMDocument.6.0」,它發現一個值。我也以管理員身份運行該文件。 – user2241406 2013-05-08 14:53:22
system32中還有一個名爲msxml6.dll的文件 – user2241406 2013-05-08 14:59:32
在我的答案中添加了try catch,您可以嘗試查看是否可以捕獲任何錯誤並檢查錯誤消息。 – HMR 2013-05-08 15:20:18