WinSCP脚本未在批处理文件中执行

时间:2015-08-11 15:06:40

标签: batch-file cmd winscp

我有一个在命令提示符下完美执行的脚本。 如果我将脚本直接复制并粘贴到命令窗口,那么它工作正常,但是当它像Windows批处理文件一样保存并运行它时它就会挂起。

option batch abort
cd \program files\winscp\ 
winscp.com /command "open HennTest:Nate82@data.test.com" /privatekey=C:\HennTest\VCS\HennTest_key_putty.ppk
option confirm off
get /*.csv C:\HennTest\VCS\
close
exit

它正在连接到服务器但在使用类似批处理时不执行get语句,但是当我直接复制/粘贴它时它正常工作。 我需要像批处理一样使用它,因为我想自动化脚本来下载文件。

2 个答案:

答案 0 :(得分:2)

将命令提示符视为提示输入序列,而批处理脚本是要执行的命令序列。批处理脚本不知道get,close和exit语句实际上是winscp提示的输入,但是等到winscp完成单独运行它们。

您可以尝试在批处理文件中将输入传递给winscp,如下所示:

cd \program files\winscp\ 
(
    echo.option batch abort
    echo.option confirm off
    echo.get /*.csv C:\HennTest\VCS\
    echo.close
    echo.exit
) | winscp.com /command "open HennTest:Nate82@data.test.com" /privatekey=C:\HennTest\VCS\HennTest_key_putty.ppk

注意:根据程序实现输入缓冲区的方式,此管道方法可能无效。

答案 1 :(得分:2)

您正在将WinSCP命令和Windows命令合并到一个文件中。那不行。批处理文件在调用removeUpdates()时停止,并等待它完成。相反,WinSCP不知道批处理文件是否存在,因此无法从那里读取其命令。

请参阅WinSCP常见问题Why are some WinSCP scripting commands specified in a batch file not executed/failing?

这有效:

winscp.com

它使用WinSCP command-line switch /command来指定命令行上的WinSCP命令。

请注意,我已经纠正了其他一些错误:

  • cd \program files\winscp\ winscp.com /command ^ "open sftp://HennTest:Nate82@data.test.com -privatekey=C:\HennTest\VCS\HennTest_key_putty.ppk" ^ "get /*.csv C:\HennTest\VCS\" ^ "close" ^ "exit" 是WinSCP命令,而不是Windows命令,因此您无法在WinSCP之前执行它。无论如何,当运行脚本或命令行中指定的命令时,WinSCP default to the batch abort的最新版本。所以你根本不需要命令。
  • command-line switch /privatekey不应与脚本相结合。使用open command。{/ li>的option batch abort开关
  • -privatekey在最新版本的WinSCP中也是默认值。
  • 虽然WinSCP默认使用SFTP协议,但建议明确提及session URL中的option confirm off前缀。