1

かなり単純なスクリプトがあります。WinSCP を起動し、「TSA」で始まるファイルのディレクトリをチェックします。ファイルが存在する場合は終了し、存在しない場合は新しいファイルに転送します。

それを作成した Windows 7 マシンで実行していますが、サーバー [Windows サーバー 2003] に転送すると、ファイルが見つかりません。

私のスクリプト:

var FILEPATH = "../zfinance/TSA";

// Session to connect to
var SESSION = "someplace@somewhere.com";

// 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 コードで上書きされるはずですが、これは行われません。

助けてくれてありがとう。

4

2 に答える 2

1

その答えは........... Windows Server 2003 の WinSCP は時代遅れでした。古いので、ログはバージョンごとに完全に異なっていました。アップデートしてVIOLA!問題が解決しました。ご協力いただきありがとうございます。

于 2013-05-08T22:40:35.393 に答える
0

おそらく、MSXML2.DOMDocument.6.0 をインストールする必要があります。

http://msdn.microsoft.com/en-us/library/windows/desktop/cc507436%28v=vs.85%29.aspx

regedit を開いて "MSXML2.DOMDocument.6.0" を探すと、見つかりますか? その場合は、スクリプトのセキュリティ設定を設定して、activeX オブジェクトを作成できるようにする必要があります。

try catch に何かを入れると、何が見えますか?

try{
//stuff
}catch(e){
  WScript.Echo(e.message);
}
于 2013-05-08T14:49:06.567 に答える