批处理文件未完全执行 WinSCP 脚本

批处理文件未完全执行 WinSCP 脚本

我正在处理一个 bat 文件,其中我必须使用 WinSCP 通过 SFTP 登录到远程服务器并执行 shell 脚本并从远程服务器获取文件到系统。

下面是代码。

cd C:\Program Files\WinSCP
winscp.com sftp://userid:password@hostname
cd /var/tmp
call ./script.sh 
get /var/tmp/log.txt C:\Preeti\log.txt
exit

但是,在执行此文件时,它会在第二行之后停止执行。我是新手,请告诉我我哪里做错了。提前感谢大家的帮助。

答案1

您的批处理文件由 Windows 命令解释器逐行解释cmd.exe

因此,一旦winscp.com到达该行,解释器就会运行winscp.com并等待它退出(它永远不会自行退出)。如果它退出了,解释器将继续执行其他失败最多的命令(因为它们不是有效的 Windows 命令)。

实际上是 WinSCP 命令(而不是 Windows 命令)的行必须输入到 WinSCP,而不是cmd.exe

另请参阅 WinSCP 常见问题解答为什么批处理文件中指定的某些 WinSCP 脚本命令未执行/失败?


在继续之前,让我修复一下你错误的 WinSCP 语法。对于自动化,你不需要使用会话 URL在 WinSCP 命令行上,你可以使用open命令而是。我下面的示例将使用它。


有两种方法:

  • 将 WinSCP 命令拆分成单独的WinSCP脚本文件, 说script.txt

    open sftp://userid:password@hostname
    cd /var/tmp
    call ./script.sh 
    get /var/tmp/log.txt C:\Preeti\log.txt
    exit
    

    并像这样运行它:

    cd C:\Program Files\WinSCP
    winscp.com /script=c:\path\to\script.txt
    
  • 使用WinSCP/command命令行开关,您可以将所有内容保存在一个文件(批处理文件)中,语法如下:

    cd C:\Program Files\WinSCP
    winscp.com /command ^
        "open sftp://userid:password@hostname" ^
        "cd /var/tmp" ^
        "call ./script.sh" ^
        "get /var/tmp/log.txt C:\Preeti\log.txt" ^
        "exit"
    

你应该读WinSCP 自动将文件传输到 SFTP 服务器指南

相关内容