我有一个在命令提示符下完美执行的脚本。 如果我将脚本直接复制并粘贴到命令窗口,那么它工作正常,但是当它像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
语句,但是当我直接复制/粘贴它时它正常工作。
我需要像批处理一样使用它,因为我想自动化脚本来下载文件。
答案 0 :(得分:2)
将命令提示符视为提示输入序列,而批处理脚本是要执行的命令序列。批处理脚本不知道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
注意:根据程序实现输入缓冲区的方式,此管道方法可能无效。
答案 1 :(得分:2)
您正在将WinSCP命令和Windows命令合并到一个文件中。那不行。批处理文件在调用removeUpdates()
时停止,并等待它完成。相反,WinSCP不知道批处理文件是否存在,因此无法从那里读取其命令。
请参阅WinSCP常见问题Why are some WinSCP scripting commands specified in a batch file not executed/failing?
这有效:
winscp.com
它使用WinSCP command-line switch /command
来指定命令行上的WinSCP命令。
请注意,我已经纠正了其他一些错误:
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命令,而不是Windows命令,因此您无法在WinSCP之前执行它。无论如何,当运行脚本或命令行中指定的命令时,WinSCP default to the batch abort
的最新版本。所以你根本不需要命令。/privatekey
不应与脚本相结合。使用open
command。{/ li>的option batch abort
开关
-privatekey
在最新版本的WinSCP中也是默认值。option confirm off
前缀。