我正在处理一个 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"