我正在使用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
这不起作用,但是文件被复制但没有被删除。有人可以帮忙吗?
答案 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
捕获错误状态,但希望这是一种可接受的解决方法。