【问题标题】:Get first and last day of previouse week on windows command line在 Windows 命令行上获取前一周的第一天和最后一天
【发布时间】:2015-05-05 18:07:56
【问题描述】:

有没有办法在windows命令行上把前一周的第一天和最后一天变成两个变量? 我想使用的日期格式是 YYYY-MM-DD。

【问题讨论】:

标签: batch-file command-line windows-console


【解决方案1】:

我不确定你如何定义你的一周,但我会假设一周从星期日开始。

批量进行日期/时间计算很痛苦。但是如果你使用我的getTimestamp.bat utility,这个问题可以很容易地解决——一个混合的 JScript/批处理脚本,可以用来执行几乎任何日期/时间计算和格式化任务。该实用程序是纯脚本,可​​以在从 XP 开始的任何 Windows 机器上本地运行。

@echo off
setlocal
call getTimestamp /f "{w}" /r dayOfWeekNum
call getTimestamp /od "-%dayOfWeekNum%-7" /f "{yyyy}-{mm}-{dd}" /r beginDate
call getTimestamp /od "-%dayOfWeekNum%-1" /f "{yyyy}-{mm}-{dd}" /r endDate
echo Last week begin date = %beginDate%
echo Last week end date   = %endDate%

编辑

上面可以很容易地概括为支持任何一天作为一周的开始。此外,如果脚本在从一周过渡到下一周的当晚午夜前一瞬间运行,则该脚本可能会给出错误的结果。我通过只获取当前日期一次,然后执行与该日期相关的所有计算来解决了这个问题。

下面的脚本将星期一指定为一周的开始。

@echo off
setlocal
set "weekStart=1"  %= 0=Sunday, 1=Monday, 6=Saturday =%
call getTimestamp /f "{ums}" /r today
call getTimestamp /d %today% /f "{w}" /r dayOfWeekNum
set /a "dayOfWeekNum=(7+dayOfWeekNum-weekStart)%%7"
call getTimestamp /d %today% /od "-%dayOfWeekNum%-7" /f "{wkd} {yyyy}-{mm}-{dd}" /r beginDate
call getTimestamp /d %today% /od "-%dayOfWeekNum%-1" /f "{wkd} {yyyy}-{mm}-{dd}" /r endDate
echo Last week begin date = %beginDate%
echo Last week end date   = %endDate%

【讨论】:

  • 会是一个很好的解决方案,但不幸的是我的管理员已经关闭了 JScript 的条件编译。
  • @KlausStadler - 您的管理员禁用了 JScript,但没有禁用 VBScript (VBS)?!那可能吗 ?我的实用程序通过 Windows 脚本主机 (WSH) 而不是浏览器运行 JScript。我知道可以禁用 WSH,但这也会阻止 VBS。您确定您的管理员没有在浏览器中禁用 JScript 吗?
【解决方案2】:

如果你可以使用vbscript,你可以尝试以下方法:

创建文件vbdate.vbs

function YMD(d)
    YMD = Year(d) & _
               "-" & Right("00" & Month(d),2) & _
               "-" & Right("00" & Day(d),2) 
end function

set oArgs=WScript.Arguments
' Assuming first day of the week is Monday:
WScript.echo YMD(DateAdd("d", -((Weekday(Now()) + 7 - 2) Mod 7) + oArgs(0), Now()))

如果您希望星期日是一周的第一天,请将最后一行替换为:

WScript.echo YMD(DateAdd("d", -((Weekday(Now()) + 7 - <strong>1</strong>) Mod 7) + oArgs(0), Now()))

这个 vbscript 有一个参数,注意它的唯一目的是执行你要求的日期计算:

  • 6 将为您提供本周的最后一天
  • 0 将为您提供本周的第一天
  • -1 会告诉你前一周的最后一天
  • -7 将为您提供前一周的第一天

要将请求的值放入两个变量中,您可以执行以下操作:

@echo off

FOR /F "usebackq tokens=*" %%r in (`CSCRIPT //Nologo "vbdate.vbs" -7`) DO SET RESULT1=%%r
FOR /F "usebackq tokens=*" %%s in (`CSCRIPT //Nologo "vbdate.vbs" -1`) DO SET RESULT2=%%s

REM First day of previous week
ECHO %RESULT1%
REM Last day of previous week
ECHO %RESULT2%

【讨论】:

    猜你喜欢
    • 2016-07-18
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多