Io 通过在JScript中将命令馈送到StdIn来编写WinSCP脚本-脚本挂起并且永远不会完成

Io 通过在JScript中将命令馈送到StdIn来编写WinSCP脚本-脚本挂起并且永远不会完成,io,sftp,wsh,jscript,winscp,Io,Sftp,Wsh,Jscript,Winscp,我正试图从SFTP服务器下载大约40个文件,但它只下载了30个文件并挂起。 请帮忙解决这个问题 这是我正在使用的脚本 var exec=shell.exec(“winscp.com/xmllog=\”C:\\download\\log\\download.xml\”); 执行标准写入( “选项批处理中止\n”+ “选项确认关闭\n”+ “开sftp://xxx:xxx@xxx-主机密钥=\“xxxx\”\n“+ “获取/下载/*\”C:\\download\\“\n”+ “退出”); 请参阅下

我正试图从SFTP服务器下载大约40个文件,但它只下载了30个文件并挂起。
请帮忙解决这个问题

这是我正在使用的脚本

var exec=shell.exec(“winscp.com/xmllog=\”C:\\download\\log\\download.xml\”);
执行标准写入(
“选项批处理中止\n”+
“选项确认关闭\n”+
“开sftp://xxx:xxx@xxx-主机密钥=\“xxxx\”\n“+
“获取/下载/*\”C:\\download\\“\n”+
“退出”);
请参阅下面的日志。
我在日志文件中找不到任何问题:

>2017-10-18 13:09:10.232类型:SSH_FXP_REMOVE,大小:54,号码:99341
<2017-10-18 13:09:10.233类型:SSH\u FXP\u状态,大小:24,号码:99076
. 2017-10-18 13:09:10.233放弃保留响应
<2017-10-18 13:09:10.235类型:SSH_FXP_状态,大小:24,编号:99341
<2017-10-18 13:09:10.235状态代码:0
. 2017-10-18 13:09:10.236文件:'/compliance/2016_QTR2_depensionsummary.xlsx'[2017-10-18T17:07:08.000Z][19819]
. 2017-10-18 13:09:10.236开始将“/compliance/2016_QTR2_depensionsummary.xlsx”复制到本地目录。
. 2017-10-18 13:09:10.236选择二进制传输模式。
. 2017-10-18 13:09:10.236打开远程文件。
>2017-10-18 13:09:10.236类型:SSH_FXP_OPEN,大小:63,号码:99587
<2017-10-18 13:09:10.239类型:SSH_FXP_手柄,尺寸:13,编号:99587
>2017-10-18 13:09:10.239类型:SSH_FXP_FSTAT,大小:13,号码:99848
<2017-10-18 13:09:10.241类型:SSH_FXP_ATTRS,大小:37,号码:99848
>2017-10-18 13:09:10.242类型:SSH_FXP_READ,大小:25,号码:100101
<2017-10-18 13:09:10.250状态代码:1
. 2017-10-18 13:09:10.250 3跳过了SSH_FXP_写入、SSH_FXP_读取、SSH_FXP_数据和SSH_FXP_状态数据包。
>2017-10-18 13:09:10.250类型:SSH_FXP_CLOSE大小:13号码:100612
. 2017-10-18 13:09:10.250保留时间戳[2017-10-18T17:07:08.000Z]
. 2017-10-18 13:09:10.251传输完成:'/compliance/2016\u QTR2\u deploymentsummary.xlsx'=>C:\Users\Arman\Desktop\Work\pwc\final\servers\comerit\u final\u download\u from_sftp\src\main\webapp\compliance\2016\u QTR2\u deploymentsummary.xlsx'[19819]
. 2017-10-18 13:09:10.251删除文件“/compliance/2016_QTR2_depensionsummary.xlsx”。
>2017-10-18 13:09:10.251类型:SSH_FXP_移除,尺寸:55,编号:100877
<2017-10-18 13:09:10.253类型:SSH_FXP_状态,大小:24,号码:100612
. 2017-10-18 13:09:10.253丢弃保留响应
<2017-10-18 13:09:10.256类型:SSH_FXP_状态,大小:24,号码:100877
<2017-10-18 13:09:10.256状态代码:0
. 2017-10-18 13:09:10.256文件:'/compliance/2016_QTR2_GainLossSummary.pdf'[2017-10-18T17:07:08.000Z][120260]
<2017-10-18 13:09:37.004脚本:由用户终止。
. 2017-10-18 13:09:37.004开始将“/compliance/2016\u QTR2\u GainLossSummary.pdf”复制到本地目录。
. 2017-10-18 13:09:37.004选择二进制传输模式。
. 2017-10-18 13:09:37.004检查是否存在部分传输的文件。
. 2017-10-18 13:09:37.005打开远程文件。
>2017-10-18 13:09:37.005类型:SSH_FXP_OPEN,大小:58,号码:101123
<2017-10-18 13:09:37.009类型:SSH\U FXP\U手柄,尺寸:13,编号:101123
>2017-10-18 13:09:37.009类型:SSH_FXP_FSTAT大小:13号码:101384
<2017-10-18 13:09:37.012类型:SSH\u FXP\u属性,大小:37,编号:101384
>2017-10-18 13:09:37.013类型:SSH_FXP_READ,大小:25,编号:101637
. 2017-10-18 13:09:37.047 9跳过了SSH_FXP_写入、SSH_FXP_读取、SSH_FXP_数据和SSH_FXP_状态数据包。
>2017-10-18 13:09:37.047型号:SSH_FXP_CLOSE尺码:13号码:102916
>2017-10-18 13:09:37.048脚本:退出
. 2017-10-18 13:09:37.048脚本:退出代码:0
. 2017-10-18 13:09:37.048关闭连接。
. 2017-10-18 13:09:37.048发送特殊代码:12
. 2017-10-18 13:09:37.048发送EOF消息

这是添加“var output=exec.StdOut.ReadAll();”后的完整工作代码

var exec=shell.exec(“winscp.com/log=\“C:\\log\\download.log\”);
exec.StdIn.Write(
“选项批处理中止\n”+
“选项确认关闭\n”+
“开sftp://xxx:xxx@xxx-主机密钥=\“xxx\”\n+
“get-delete/compliance/*\”C:\\compliance\\\“\n”+
“退出”);
exec.StdIn.Close();
var output=exec.StdOut.ReadAll();
谢谢

Arman

您没有向我们展示在
exec.StdIn.Write()之后您做了什么

确保您阅读了程序输出,例如(如官方所示):

var output=exec.StdOut.ReadAll();

另请参见(相同的问题,但C#除外):

您需要在脚本运行时连续收集输出。输出流的容量有限。一旦填满,WinSCP就会挂起等待可用空间,永远不会结束



除上述操作外,还必须使用
\n
终止
退出
命令。尽管在您的情况下,使用标准输入提供命令没有多大意义。只需使用。

向我们显示一个日志文件(
/log=c:\path\to\winscp.log
)。我已经编辑了我的问题并添加了日志输出。看起来有个限度。是否可能是SFTP服务器端问题?或者对要下载的文件有默认限制?它在“2017-10-18 13:09:10.256”行停止,我已从命令行终止会话。我已编辑我的问题,请查看完整代码。我添加了var output=exec.StdOut.ReadAll();但它仍然挂着。请让我知道我需要在那里改变什么。没关系。我刚刚移动了exec.StdIn.Close();变量输出前的行=exec.StdOut.ReadAll();现在它可以工作了。非常感谢你的帮助,马丁!好的,在
退出之后,您实际上缺少了
\n
。是的,我也添加了这个。谢谢!它现在可以正常工作了。谢谢你的提示!我利用了我的特权