Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows批处理文件和FTP日期戳_Windows_Batch File_Timestamp - Fatal编程技术网

Windows批处理文件和FTP日期戳

Windows批处理文件和FTP日期戳,windows,batch-file,timestamp,Windows,Batch File,Timestamp,我正在努力掌握编写批处理文件的概念。我希望安排一个.bat文件,每天下载一个带有时间戳的文件。设置计划任务等是很简单的,当我尝试执行代码以获取文件名的固定部分并附加日期戳以标识适当的文件时,问题就出现了 根据我所做的研究,我仍然无法让我的代码以YYYYMMDD格式提取昨天的日期。今天是8月15日,我想让我的一批人用20130814标识文件。我现有的(静态)ftp批处理代码是 option confirm off option batch abort open Ftp_name lcd "U:\X

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

根据我所做的研究,我仍然无法让我的代码以YYYYMMDD格式提取昨天的日期。今天是8月15日,我想让我的一批人用20130814标识文件。我现有的(静态)ftp批处理代码是

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

get "LoanSummary__Daily.xlsx"
我希望这个批次考虑……/P>
get "LoanSummary__Daily_" & YYYYMMDD & ".xlsx"

谢谢。

我认为您无法在FTP脚本中动态生成文件名。但是,您可以在调用ftp脚本之前使用批处理文件动态构建该脚本

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

在Windows批处理文件中获取昨天的日期是一项非常重要的工作。在SO和其他网站上发布了许多方法。大多数方法都有各种各样的限制,其中最常见的是不易接受由于区域设置日期格式不同而产生的问题。我使用了一个名为
getTimestamp.bat
的混合批处理/JScript实用程序,它将在XP以后的任何Windows平台上工作,而不管语言环境如何。它是纯脚本,因此不需要下载.exe

假设
getTimestamp.bat
位于当前目录中,或者更好地说,位于路径中的某个位置,那么下面的方法应该可以工作

getDayed.ftp.template

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

get "LoanSummary__Daily_!yesterday!.xlsx"
GetDayed.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