sftp 批处理文件无法执行

sftp 批处理文件无法执行

我有一个 Windows 批处理文件,用于通过 sftp 从服务器 A(Windows)连接到服务器 B(UNIX)以获取文件。脚本如下:

sftpg3 -oStrictHostKeyChecking=no -oIdentityFile=EAPIINSTADM_hostnameA ftpeapsg@hostnameB
lcd D:\APPBASE\EAPSG\GEMSSG
get GENUOBGW1 /sftp/ftphrssg/HRSSG/EAPSG
exit

当我运行脚本时,它在运行第一行后停止,即 sftpg3 -oStrictHostKeyChecking=no...

D:\APPBASE\EAPSG\GEMSSG>sftpg3 -oStrictHostKeyChecking=no -oIdentityFile=EAPIINSTADM_hostnameA ftpeapsg@hostnameB
Warning: ignoring unsupported option -o
Warning: ignoring unsupported option -o
Remote system type is POSIX.
sftp>

它没有执行以下几行:

lcd D:\APPBASE\EAPSG\GEMSSG
get GENUOBGW1 /sftp/ftphrssg/HRSSG/EAPSG

如果我一次手动运行一行命令,它就会起作用。

知道为什么脚本没有完全运行吗?

谢谢。

答案1

批处理文件不要模仿键盘输入。他们启动程序并等待这些程序完成;整个脚本暂停,直到您退出 sftpg3,并且以下行(lcd、get)将作为独立命令运行。

如果您的 sftp 客户端有自己的“批处理脚本”选项,请使用它(例如 OpenSSH 有sftp -b,WinSCP 有一个winscp.com用于脚本的整体)。

sftp -b ftpcommands.txt eapsg@hostname

如果没有,您可以使用以下方式提供输入重定向,即<运算符:

sftpg3 eapsg@hostname < ftpcommands.txt

提供内联命令可能使用管道工作(虽然不如<<Unix shell 那么方便):

(echo lcd D:\APPBASE\EAPSG\GEMSSG & echo get GENUOBGW1 /sftp/ftphrssg/HRSSG/EAPSG) | sftpg3 host

相关内容