我有一个 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