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

WinSCP script not executing in batch file

我有一个脚本可以在命令提示符下完美执行。 如果我将脚本直接复制并粘贴到命令 window 那么它工作正常,但是当像 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 语句,但当我直接 copy/paste 它时它工作正常。 我需要像批处理一样使用它,因为我想自动执行脚本来下载文件。

将命令提示符视为提示输入序列,而批处理脚本是要执行的命令序列。批处理脚本不知道 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

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

您正在将 WinSCP 命令和 Windows 命令合并到一个文件中。那行不通。批处理文件在调用 winscp.com 时停止并等待它完成。相反,WinSCP 甚至不知道批处理文件的存在,因此它无法从那里读取命令。

查看 WinSCP 常见问题解答 Why are some WinSCP scripting commands specified in a batch file not executed/failing?

有效:

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 command-line switch /command,您可以使用它在其命令行上指定 WinSCP 命令。


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

  • option batch abort是WinSCP命令,不是Windows命令,所以不能在WinSCP之前执行。无论如何,最新版本的 WinSCP default to the batch abort,当 运行 命令在脚本或命令行中指定时。所以你根本不需要这个命令。
  • command-line switch /privatekey should not be combined with scripting. Use the -privatekey switch of the open command.
  • option confirm off在最新版本的WinSCP中也是默认的。
  • 虽然 WinSCP 默认使用 SFTP 协议,但还是建议在 session URL 中明确提及 sftp:// 前缀。