用于下载昨天文件的 Windows 批处理脚本 [英] Windows batch script to download yesterday files

查看:20
本文介绍了用于下载昨天文件的 Windows 批处理脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写一个脚本,使用 ftp.exe 从 FTP 服务器下载文件,它一开始可以工作.但我写的版本只适用于一个文件和当前日期.我的脚本如下:

I am writing a script using ftp.exe to download files from an FTP server, it works at first. But the version I wrote was suited for only one file and the current date. My script is below:

echo user>>ftp.txt
echo password>>ftp.txt
set prefix=%date:~0,10%
set "name=%prefix%.txt"
echo get %name% >> ftp.txt
echo bye >> ftp.txt
ftp -s:ftp.txt ftpserver.com
del ftp.txt

但是现在有不止一个文件名为aa-bb-2011-09-13.0.logaa-bb-2011-09-13.1.log,aa-bb-2011-09-13.10.log.最后一个数字是序列号,可以是0123...

But now there are more than one file named like aa-bb-2011-09-13.0.log, aa-bb-2011-09-13.1.log, aa-bb-2011-09-13.10.log. The last number is a serial number, it could be 0, 1, 2, 3...

如何通过批处理脚本下载这些文件?如何修改我的脚本以下载多个文件(数量未知)昨天的文件名模式?

How could download these files by batch script? How to modify my script to download more than one file (the number is unknown) which file name pattern is yesterday?

推荐答案

在下载多个文件方面,使用mget代替get.前者允许您指定通配符来获取而不是特定文件.

In terms of downloading multiple files, use mget instead of get. The former allows you to specify wildcards for getting rather than specific files.

您只需要使用通配符模式构造名称",并确保您的脚本中在 mget 之前有一个 prompt 否则它会要求确认每个文件.

You'll just have to construct the "name" with a wildcard pattern, and make sure you have a prompt in your script before mget otherwise it will ask for confirmation on every file.

这是未经测试的,但它可能就像改变一样简单:

This is untested, but it's probably as simple as changing:

echo get %name% >> ftp.txt

类似于:

echo prompt>>ftp.txt
echo mget *%prefix%*>>ftp.txt

<小时>

在获取昨天的日期方面,您可以使用以下脚本.与您将要执行的操作(例如 bash)相比,它相当复杂,但它确实有效.


In terms of getting yesterdays date, you can use the following script. It's pretty complex compared to what you would do in, for example bash, but it works.

@setlocal enableextensions enabledelayedexpansion
@echo off

rem Get the date from WMI (on one line).

for /f "skip=2 tokens=2-7 delims=," %%A in ('wmic 
        path win32_localtime get day^,month^,year^ /format:csv') do (
    set /a "yest_yyyy = %%C"
    set /a "yest_mm = %%B"
    set /a "yest_dd = %%A"
)

rem Not the first of the month, just decrement day.

if not %yest_dd%==1 (
    set /a yest_dd = yest_dd - 1
    goto done
)

rem Jan 1, set to Dec 31 previous year.

if %yest_mm%==1 (
    set /a "yest_dd = 31"
    set /a "yest_mm = 12"
    set /a "yest_yyyy = yest_yyyy - 1"
    goto :done
)

rem Any other day, decrement month.

set /a "yest_mm = yest_mm - 1"

rem Need to find last day, default to 31.

set dim=31

rem Apr/Jun/Sep/Nov all have 30 days. Feb gets special handling.

if %yest_mm%==4 set dim=30
if %yest_mm%==6 set dim=30
if %yest_mm%==9 set dim=30
if %yest_mm%==11 set dim=30
if not %yest_mm%==2 goto :got_dim

rem Default Feb to 28 then use rules to override.

set dim=28

set /a "divid=yest_yyyy%%400"
if "%divid%"=="0" goto daysinmonth_29days
set /a "divid=yest_yyyy%%100"
if "%divid%"=="0" goto :done
set /a "divid=yest_yyyy%%4"
if not "%divid%"=="0" goto :done

rem Adjust to 29 days.

:daysinmonth_29days

set dim=29

:done

rem Pad out and return value.

if %yest_mm% lss 10 set yest_mm=0%yest_mm%
if %yest_dd% lss 10 set yest_dd=0%yest_dd%

set yesterday=%yest_yyyy%-%yest_mm%-%yest_dd%

endlocal && set yesterday=%yesterday%

它将 yesterday 环境变量设置为 YYYY-MM-DD 格式,以便您可以在当前脚本中使用它.只需调用 call昨天.cmd 然后使用环境变量.

It will set the yesterday environment variable to the format YYYY-MM-DD so that you can use it in your current script. Simply invoke call yesterday.cmd and then use the environment variable.

这篇关于用于下载昨天文件的 Windows 批处理脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆