Date 我如何找到上周日';s日期并将其保存在Windows批处理文件的变量中
我有一个脚本,需要连接到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”,因此它可能对您没有用处 正如我现在看到的,它可能比它需要的更复杂,可能需要一些清理,但它为我的目的工作。您可能能够以某种方式修改它,使其在上周日而不是昨天找到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
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)
它计算了最近一个星期天的日期,很感激地借用了它
将所需的yyy-MM-dd格式应用于日期'{0:yyyy-MM-dd}'-f…
调用powershell表达式并将其结果输出到stdoutpowershell-noprofile命令…
对于(`…`)do set lastSunday=%d中的/f“usebackq”%%d,捕获PowerShell命令的输出并将其分配给批处理变量
lastSunday
虽然从批处理文件中仅为一个命令调用PowerShell会很慢,但能够如此方便地计算所需的日期可能会超过性能问题。(获取日期).AddDays(-(获取日期).dayofWeek.value\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(这将是上周日的文件).我在这个网站和其他网站上搜索了很多帖子,但我是批处理语法的新手,所以你根本没有发现任何有用的东西?甚至连让你接近的东西都没有,你可以分享吗?你指的是PS脚本可移植性的什么问题?如果答案解决了你的问题,请单击大复选标记接受它(✓) 旁边。如果您发现其他答案有帮助,请向上投票。接受和向上投票答案不仅有助于回答的人,也有助于未来的读者。请参阅。如果您的问题尚未完全回答,请提供反馈。问题状态为
,并将其转换为yyyy mm dd(我不在乎时间)
和将其保存在Windows批处理文件的变量中。
。您可能需要调整答案。