需要帮助传输文件到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。
在上面的脚本中如何实现它,所以它将拉出当前文件。
答案 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
。
由于以下原因,它使代码更容易:
%TIMESTAMP%
syntax(您不需要生成finance
带时间戳名称的可怕代码); 示例:
...
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的作者)