有没有办法使用PSFTP检查返回代码?

时间:2015-12-30 08:21:49

标签: batch-file psftp

我正在使用Windows BATCH创建一个脚本文件,然后使用PSFTP调用它(使用Putty从命令行调用TransferScript.txt)。

要求是从Unix框中获取一个文件到Windows然后从Unix中删除它但是在返回0后我的代码看起来像:

TransferScript.txt

lcd E:\Temp 
cd /sap/xx/yy 
get abc.dat 
IF %ERRORLEVEL% EQ 0
rm abc.dat
quit

这不起作用,但是文件被复制但没有被删除。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

该文件的命令处理器为psftp,而不是cmd.exe。因此,IF不是公认的命令。但是,您可以使用! PSFTP命令将命令传递给Windows。这是documented here。这是一个经过测试的工作版本:

命令:psftp -b script.txt username@ftpserver.com -pw password

#script.txt
!echo Connected. Getting file...
lcd c:\temp 
cd sap/xx/yy
get abc.dat
!IF EXIST c:\temp\abc.dat echo Success
!IF NOT EXIST c:\temp\abc.dat echo Failure
quit

如果文件存在于本地文件系统上,只需将echo Success替换为rm abc.dat或任何您想要发生的事情。

另一种选择是在外部批处理文件中执行所有逻辑。编写2 PSFTP个脚本,如script_get.txt和script_rm.txt,并仅在文件存在时调用第二个脚本(如上所述)。

我知道这些解决方案在技术上都没有回答您的问题,因为它们没有从PSFTP捕获错误状态,但希望这是一种可接受的解决方法。