【问题标题】:Upload timestamped file using PuTTY/SFTP file transfer使用 PuTTY/SFTP 文件传输上传带时间戳的文件
【发布时间】:2014-11-19 22:05:53
【问题描述】:

在将文件传输到 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。

在上面的脚本中是如何实现的,所以会拉起当前文件。

【问题讨论】:

  • Martin,在第二个驱动程序中,我们有“FileName.txt”,在第三个驱动程序中,我们有“File.Txt”,这是相同的(错字)。所以,我们需要正确传输这个文件。但是当文件生成时,它将生成添加当前日期。如 File20141110.txt。第二天将是 20141112.txt。所以我的问题是,这个脚本如何知道选择哪个文件,因为文件名每天都在变化。对。
  • 我明白了,所以根据我上面链接的问题修改批处理文件以生成预期的名称(带有今天的日期)。
  • 我们不能真正在上面的脚本中使用 File.Txt 因为文件名今天和明天会不同等等。
  • 好吧,要么你不了解我,要么我不了解你。我知道文件名每天都会不同。名字里的日期变了,对吧?因此,您也可以使用我链接的示例生成(或计算)实际名称。或者是否有任何其他组件(时间戳除外)每天都会发生变化?
  • 我有一个脚本可以根据当前时间戳修改文件..我想自动化这个过程。因此,第一个脚本将更改文件名,上面的脚本会将文件 sftp 到目标位置。但是上面的脚本不能正常工作,因为文件名是 statIC。我们在第二个脚本中使用 File.txt,而文件名已经更改为 File20141120.txt

标签: batch-file cmd sftp


【解决方案1】:

如果我理解这个问题,你不知道如何修改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 和其他类似问题。

如果您已经在某个变量中拥有重命名的文件名(我从您的 cmets 中了解到,但在代码中没有看到),那就更简单了,只需使用您的变量而不是 %date%

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

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 的作者)

【讨论】:

  • 谢谢马丁。你是对的。非常感谢您的帮助。动态文件名,就是这个词。:) 现在知道了。谢谢。
  • 对此一无所知。 :) 从现在开始会这样做
  • 马丁,有一个问题。由于我们在 Windows 服务器上使用 sftp,我们需要正确使用 Putty。对我来说,winscp 代码更简单,并且想使用它。我们是否需要为此使用 Putty。
  • 您可以使用任何可编写脚本的 Windows SFTP 客户端,包括 WinSCP 和 psftp。选择是你的。你不需要 PuTTY 来使 WinSCP 工作,它是独立的应用程序(如果这是问题的话)。
  • 马丁。还有一个问题。如果 winscp 代码是独立的,那么我需要将文件移植到 winscp.com 吗?如果是,我该怎么做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 2011-08-26
  • 2019-03-23
  • 1970-01-01
  • 2015-05-31
  • 2015-07-18
相关资源
最近更新 更多