我正在努力掌握编写批处理文件的概念。我希望安排一个.bat文件来下载每天带有时间戳的文件。设置预定任务等是直截了当的,当我尝试执行代码以获取文件名的固定部分并附加日期戳以识别适当的文件时,我的问题出现了。
从我所做的研究中,我仍然无法让我的代码以YYYYMMDD格式获取昨天的日期。例如。今天是8月15日,我希望我的批处理能够识别20130814的文件。我的exisitng(静态)ftp批处理代码是
option confirm off
option batch abort
open Ftp_name
lcd "U:\XXXX\YYYY\ZZZZ"
get "LoanSummary__Daily.xlsx"
我希望批次考虑..
get "LoanSummary__Daily_" & YYYYMMDD & ".xlsx"
感谢。
答案 0 :(得分:1)
我认为您不能在FTP脚本中动态构建文件名。但是可以在调用之前用批处理文件动态构建ftp脚本。
最简单的方法是创建一个ftp脚本模板,其中可变部分表示为具有延迟扩展的环境变量。例如,!yesterday!
可以引用一个扩展到昨天日期的环境变量。一个简单的FOR / F循环读取模板,并将每一行写入新的ftp脚本文件。只要启用延迟扩展,变量就会在过程中自动扩展。
在Windows批处理文件中获取昨天的日期是一项非常重要的练习。在SO以及其他网站上发布了许多方法。大多数方法都有各种限制,其中最常见的是由于区域设置日期格式的差异而导致问题的可接受性。我使用一个名为getTimestamp.bat
的混合批处理/ JScript实用程序,它可以在XP以后的任何Windows平台上运行,而不管语言环境如何。它是纯脚本,因此不需要.exe下载。 getTimestamp.bat
is avaiable here
假设getTimestamp.bat
位于您当前目录中,或者更好,位于PATH中的某个位置,则以下内容应该有效。
<强> getYesterday.ftp.template 强>
option confirm off
option batch abort
open Ftp_name
lcd "U:\XXXX\YYYY\ZZZZ"
get "LoanSummary__Daily_!yesterday!.xlsx"
<强> getYesterday.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