如何从今天和昨天从FTP下载更新的数据?

时间:2016-10-06 06:34:28

标签: windows batch-file ftp winscp

我希望昨天和今天使用变量名称文件从我的FTP下载更新的数据,像这样的结构文件

  

Daily_(城市)_(年月日)的.xlsx

我试过这段代码

daily.bat

winscp.exe /console /script=daily.txt

daily.txt

::: Begin set date

for /f "tokens=1-4 delims=/-. " %%i in ('date /t') do (call :set_date %%i %%j %%k %%l)
goto :end_set_date

:set_date
if "%1:~0,1%" gtr "9" shift
for /f "skip=1 tokens=2-4 delims=(-)" %%m in ('echo,^|date') do (set %%m=%1&set %%n=%2&set %%o=%3)
goto :eof

:end_set_date
::: End set date

set /a today=%dd%
set /a yesterday=%dd%-1

@echo off
open Reg_8@192.168.8.1  
get -neweronly "/Reg8/Kota/2016/Daily/Daily_Makassar_%yy%%mm%%today%.xlsx" "D:\FTP\Makassar\2016\daily"
get -neweronly "/Reg8/Kota/2016/Daily/Daily_Makassar_%yy%%mm%%yesterday%.xlsx" "D:\FTP\Makassar\2016\daily"
pause

如果我运行此脚本不会发生......

1 个答案:

答案 0 :(得分:3)

您将Windows和WinSCP命令合并到一个文件中。这是不可能的。首先阅读guide to automating file transfers from FTP server or SFTP server

您的脚本太复杂了,因为您没有使用WinSCP %TIMESTAMP% syntax

一种简单的方法(=SUMIFS(SalesTable[revenue], SalesTable[product category],$K7, SalesTable[year],Q$6, SalesTable[Country],IF(ISNUMBER(SEARCH($C$1,"all")),"*",$C$1), SalesTable[Customer Gender],IF(ISNUMBER(SEARCH($C$2,"All")),"*",$C$2), SalesTable[Age group],IF(ISNUMBER(SEARCH($C$3,"All")),"*",$C$3)) ):

daily.txt

(只有这一点,丢弃open ftp://user:mypassword@ftp.example.com/ get -neweronly "/Reg8/Kota/2016/Daily/Daily_Makassar_%TIMESTAMP#yyyymmdd%.xlsx" "D:\FTP\Makassar\2016\daily" get -neweronly "/Reg8/Kota/2016/Daily/Daily_Makassar_%TIMESTAMP-1D#yyyymmdd%.xlsx" "D:\FTP\Makassar\2016\daily"

中的所有其他代码

daily.txt将解析为%TIMESTAMP#yyyymmdd% 20161006将解析为%TIMESTAMP-1D#yyyymmdd%(截至2016-10-06)。

你需要WinSCP 5.9及更新版本。

通常,您应该从批处理文件而不是20161005调用winscp.com