Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
Date 我如何找到上周日';s日期并将其保存在Windows批处理文件的变量中_Date_Powershell_Batch File - Fatal编程技术网

Date 我如何找到上周日';s日期并将其保存在Windows批处理文件的变量中

Date 我如何找到上周日';s日期并将其保存在Windows批处理文件的变量中,date,powershell,batch-file,Date,Powershell,Batch File,我有一个脚本,需要连接到ftp服务器并下载一个仅在周日创建的文件,周日的yyyy-mm-dd-hh-mm-ss附加到文件名。我需要找到最后一个星期天的日期(我假设是基于今天的日期),并将其转换为yyyy mm dd(我不关心时间),以便在ftp脚本中构造文件名。我在这个网站和其他网站上搜索了很多帖子,但我对批处理语法还是有点生疏。我无法假设运行此脚本的计算机上的日期格式,但它将与ftp服务器位于同一时区,并且至少运行Windows 7。我曾考虑在中使用PowerShell解决方案,但我已了解到P

我有一个脚本,需要连接到ftp服务器并下载一个仅在周日创建的文件,周日的yyyy-mm-dd-hh-mm-ss附加到文件名。我需要找到最后一个星期天的日期(我假设是基于今天的日期),并将其转换为yyyy mm dd(我不关心时间),以便在ftp脚本中构造文件名。我在这个网站和其他网站上搜索了很多帖子,但我对批处理语法还是有点生疏。我无法假设运行此脚本的计算机上的日期格式,但它将与ftp服务器位于同一时区,并且至少运行Windows 7。我曾考虑在中使用PowerShell解决方案,但我已了解到PS脚本可移植性存在问题。非常感谢您的帮助。如果我需要提供更多细节,请告诉我。谢谢

几年前,我写了一个批处理脚本来查找昨天的日期。我让它能够根据今天的日期计算“昨天”。它考虑到了在30或31日结束的月份,甚至是接下来的几闰年。我写这封信的方式是希望日期的格式为“Wed 02/24/2016”或“ddd MM/DD/YYYY”,因此它可能对您没有用处

正如我现在看到的,它可能比它需要的更复杂,可能需要一些清理,但它为我的目的工作。您可能能够以某种方式修改它,使其在上周日而不是昨天找到

set yearCounter=0
set yyyy=%date:~10,4%
set mm=%date:~4,2%
set dd=%date:~7,2%

::use these to override the actual date values for testing
::set yyyy=xxxx
::set mm=xx
::set dd=xx

if %dd%==01 goto LDoM ::Last Day of Month

set DS=%yyyy%%mm%%dd%
set /A yesterday=%DS%-1
goto endyesterday

:LDoM
set /A lastyyyy=%yyyy%-%yearCounter%

if %yesterday:~4,2%==01 set lastmm=12& set lastdd=31& goto LDoY ::Last Day of Year
if %yesterday:~4,2%==02 set lastmm=01& set lastdd=31
if %yesterday:~4,2%==03 set lastmm=02& goto february
if %yesterday:~4,2%==04 set lastmm=03& set lastdd=31
if %yesterday:~4,2%==05 set lastmm=04& set lastdd=30
if %yesterday:~4,2%==06 set lastmm=05& set lastdd=31
if %yesterday:~4,2%==07 set lastmm=06& set lastdd=30
if %yesterday:~4,2%==08 set lastmm=07& set lastdd=31
if %yesterday:~4,2%==09 set lastmm=08& set lastdd=31
if %yesterday:~4,2%==10 set lastmm=09& set lastdd=30
if %yesterday:~4,2%==11 set lastmm=10& set lastdd=31
if %yesterday:~4,2%==12 set lastmm=11& set lastdd=30

set yesterday=%lastyyyy%%lastmm%%lastdd%
goto endYesterday

:february
set leapyear=n
set lastdd=28
if %yesterday:~0,4%==2016 set leapyear=y
if %yesterday:~0,4%==2020 set leapyear=y
if %yesterday:~0,4%==2024 set leapyear=y
if %yesterday:~0,4%==2028 set leapyear=y
if %leapyear%==y set lastdd=29

set yesterday=%lastyyyy%%lastmm%%lastdd%
goto endYesterday

:LDoY
set /A yearCounter=%yearCounter%+1
set /A lastyyyy=%yyyy%-%yearCounter%
set yesterday=%lastyyyy%%lastmm%%lastdd%

:endYesterday
@echo off
echo %yyyy%  %lastyyyy%
echo %mm%    %lastmm%
echo %dd%    %lastdd%
echo.
echo today     = %yyyy%%mm%%dd%
echo yesterday = %yesterday%

可以使用纯批处理来处理日期和时间,但这不是很方便

在批处理上下文中,可以简化日期/时间计算和格式设置。它是纯脚本(混合JScript/批处理),从XP开始在任何Windows机器上本机运行。上一个链接指向最新版本。该实用程序最初是在上通过一些示例介绍的

可通过命令行通过
getTimestamp/?
,或
getTimestamp/??
获取分页输出的完整文档

使用GetTimestamp,解决方案可以简单到:

@echo关闭
::获取一周中的当前日期,0=星期日,6=星期六
::用作从今天开始的偏移,以获取最近的星期日
调用getTimeStamp-f{w}-r偏移量
::使用偏移量以YYYY-MM-DD格式获取最近的星期日
调用getTimeStamp-od-%offset%f{iso dt}-r lastsdanday
::显示结果
echo lastSunday=%lastSunday%

从批处理文件中尝试以下操作:

for /f "usebackq" %%d in (`powershell -noprofile -command "'{0:yyyy-MM-dd}' -f [DateTime]::Now.AddDays(-1 * [DateTime]::Now.DayOfWeek)"`) do set "lastSunday=%%d"

echo %lastSunday%
:: -> e.g., "2016-02-21", when run on 2016-02-25
要直接在命令提示符下尝试此操作,请将
%%d
替换为
%d

  • 命令核心的PowerShell表达式,
    [DateTime]::Now.AddDays(-1*[DateTime]::Now.DayOfWeek)

    它计算了最近一个星期天的日期,很感激地借用了它

  • '{0:yyyy-MM-dd}'-f…
    将所需的yyy-MM-dd格式应用于日期

  • powershell-noprofile命令…
    调用powershell表达式并将其结果输出到stdout

  • 对于(`…`)do set lastSunday=%d中的/f“usebackq”%%d,捕获PowerShell命令的输出并将其分配给批处理变量
    lastSunday


虽然从批处理文件中仅为一个命令调用PowerShell会很慢,但能够如此方便地计算所需的日期可能会超过性能问题。

(获取日期).AddDays(-(获取日期).dayofWeek.value\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(这将是上周日的文件).我在这个网站和其他网站上搜索了很多帖子,但我是批处理语法的新手,所以你根本没有发现任何有用的东西?甚至连让你接近的东西都没有,你可以分享吗?你指的是PS脚本可移植性的什么问题?如果答案解决了你的问题,请单击大复选标记接受它(✓) 旁边。如果您发现其他答案有帮助,请向上投票。接受和向上投票答案不仅有助于回答的人,也有助于未来的读者。请参阅。如果您的问题尚未完全回答,请提供反馈。问题状态为
,并将其转换为yyyy mm dd(我不在乎时间)
将其保存在Windows批处理文件的变量中。
。您可能需要调整答案。