0

我正在努力掌握编写批处理文件的概念。我希望安排一个 .bat 文件每天下载一个带有时间戳的文件。设置计划任务等很简单,当我尝试执行代码以获取文件名的固定部分并附加日期戳以识别适当的文件时,我的问题就出现了。

根据我所做的研究,我仍然无法让我的代码以 YYYYMMDD 格式获取昨天的日期。例如。今天是 8 月 15 日,我希望我的批处理能够识别 20130814 的文件。我的现有(静态)ftp 批处理代码是

option confirm off
option batch abort
open Ftp_name
lcd "U:\XXXX\YYYY\ZZZZ"

get "LoanSummary__Daily.xlsx"

而我希望这批考虑..

get "LoanSummary__Daily_" & YYYYMMDD & ".xlsx"

谢谢。

4

1 回答 1

1

我认为您不能在 FTP 脚本中动态构建文件名。但是您可以在调用它之前使用批处理文件动态构建 ftp 脚本。

最简单的方法是创建一个 ftp 脚本模板,其中的变量部分表示为具有延迟扩展的环境变量。例如!yesterday!,可以引用扩展为昨天日期的环境变量。一个简单的 FOR /F 循环读取模板,并将每一行写入一个新的 ftp 脚本文件。只要启用延迟扩展,变量就会在此过程中自动扩展。

在 Windows 批处理文件中获取昨天的日期是一项非常重要的练习。SO以及其他网站上发布了许多方法。大多数方法都有各种限制,其中最常见的是由于语言环境日期格式的差异而容易出现问题。我使用了一个名为的混合批处理/JScript 实用程序getTimestamp.bat,它可以在从 XP 开始的任何 Windows 平台上运行,无论语言环境如何。它是纯脚本,所以不需要 .exe 下载。getTimestamp.bat在这里可用

假设getTimestamp.bat在您的当前目录中,或者更好的是,在您的 PATH 中的某个位置,那么以下应该可以工作。

获取昨天.ftp.template

option confirm off
option batch abort
open Ftp_name
lcd "U:\XXXX\YYYY\ZZZZ"

get "LoanSummary__Daily_!yesterday!.xlsx"

获取昨天.bat

@echo off
setlocal enableDelayedExpansion

:: Get yesterday's date in YYYYMMDD format
call getTimestamp -od -1 -f {yyyy}{mm}{dd} -r yesterday

:: Create a temporary ftp script that uses the "yesterday" date
>temp.ftp (for /f "delims=" %%L in (getYesterday.ftp.template) do echo %%L)

:: Now simply invoke your ftp client using the temp script, something like
ftp -s:temp.ftp ...

:: Delete the temporary ftp script
del temp.ftp
于 2013-08-15T17:06:50.167 回答