在 windows 命令行上获取前一周的第一天和最后一天
Get first and last day of previouse week on windows command line
有没有办法在windows命令行中把前一周的第一天和最后一天变成两个变量?
我想使用的日期格式是 YYYY-MM-DD。
我不确定你如何定义你的一周,但我假设一周从星期日开始。
批量执行 date/time 计算很痛苦。但是,如果您使用我的 getTimestamp.bat utility - 一个混合 JScript/batch 脚本,可以用来执行几乎任何 date/time 计算和格式化任务,这个问题就可以轻松解决。该实用程序是纯脚本,运行 在任何 Windows XP 以后的机器上都是原生的。
@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%
如果你会用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%
有没有办法在windows命令行中把前一周的第一天和最后一天变成两个变量? 我想使用的日期格式是 YYYY-MM-DD。
我不确定你如何定义你的一周,但我假设一周从星期日开始。
批量执行 date/time 计算很痛苦。但是,如果您使用我的 getTimestamp.bat utility - 一个混合 JScript/batch 脚本,可以用来执行几乎任何 date/time 计算和格式化任务,这个问题就可以轻松解决。该实用程序是纯脚本,运行 在任何 Windows XP 以后的机器上都是原生的。
@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%
如果你会用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%