使用PuTTY / SFTP文件传输上传带时间戳的文件

时间:2014-11-19 22:05:53

标签: batch-file cmd sftp

需要帮助传输文件到sftp服务器。我们有一个包含3个阶段的脚本。

驱动程序

ECHO off
path\file.sftp.sc.bat

驱动程序 -file.sftp.sc.bat

@ECHO OFF

set PUTTY_HOME= LOCATION\ PUTTY
set PATH=%PUTTY_HOME%;%PATH%
REM ECHO %DOWNLOADDATA1%
set DOWNLOADDATA1="N"
IF EXIST LOCATION\"FileName.txt"  SET DOWNLOADDATA1="Y"
ECHO %DOWNLOADDATA1%
IF %DOWNLOADDATA1% =="N" goto unsucc
ECHO %DOWNLOADDATA1%
ECHO GETTING DATA FILE
psftp -password -b LOCATION\Summary_LOC_SC.ftp user name
ECHO %ERRORLEVEL%
IF %ERRORLEVEL% EQU 0 LOCATION\ Success_email.vbs
goto end
IF %ERRORLEVEL% NEQ 0 LOCATION\UNSuccess_Email.vbs
goto end
:UNSUCC
ECHO %DOWNLOADDATA1%
ECHO UNSUCCESSFUL
LOCATION\UNSuccess_FNF_Email.vbs
:END

驱动程序 -Summary_LOC_SC.ftp

cd/fall2014
1cd LOCATION OF FILE
put "File.Txt"
quit

现在,文件名将随日期而改变,我的意思是,今天它将是file20141118.txt,明天将是file20141119.txt。

在上面的脚本中如何实现它,所以它将拉出当前文件。

1 个答案:

答案 0 :(得分:3)

如果我理解了这个问题,您就不知道如何修改psftp脚本以满足动态文件名。

您可以动态生成脚本,如:

...
ECHO GETTING DATA FILE
echo cd/fall2014 > LOCATION\Summary_LOC_SC.ftp
echo cd LOCATION OF FILE >> LOCATION\Summary_LOC_SC.ftp
echo put "File%date:~-4,4%%date:~-7,2%%date:~-10,2%.Txt" >> LOCATION\Summary_LOC_SC.ftp
echo quit >> LOCATION\Summary_LOC_SC.ftp
psftp -password -b LOCATION\Summary_LOC_SC.ftp user name
...

请注意,上面的%date%魔法是特定于语言环境的。您可能需要调整它。 请参阅此处的How to get a UNIVERSAL Windows batch file timestamp和其他类似问题。

如果您已经在某个变量中重命名了文件名(我从您的评论中理解,但在代码中没有看到它),那么更容易,只需使用您的变量而不是%date%

编辑:看到您的相关问题Batch file with current date,只需使用the answer中的finance变量:

echo put "%finance%" >> LOCATION\Summary_LOC_SC.ftp

或者使用WinSCP代替psftp

由于以下原因,它使代码更容易:

示例:

...
ECHO GETTING DATA FILE
winscp.com /command ^
    "open sftp://username:password@host/" ^
    "cd /fall2014" ^
    "cd LOCATION OF FILE" ^
    "put ""File%%TIMESTAMP#yyyymmdd%%""" ^
    "exit"
...

参考文献:
https://winscp.net/eng/docs/scripting#timestamp
https://winscp.net/eng/docs/guide_automation

(我是WinSCP的作者)