如何获得批次

时间:2016-04-06 06:14:15

标签: date batch-file batch-processing

这就是我想做的事情:

  1. 获取当前日期,这很容易---%DATE%
  2. DO当前日期 - 1,我似乎无法得到,因为我尝试了不同的选项。
  3. 我想从当前日期获取最后4个日期,然后将它们存储在4个不同的变量中。然后将每个日期转换为YYYYMMDD格式。

    所以%DATE%给了我06/04/2016 ..... %DATE%

    -1 should give me 05/04/2016 stored in Variable say Date1........
    -2 should give me 04/04/2016 stored in Variable say Date2........
    -3 should give me 03/04/2016 stored in Variable say Date3........
    -4 should give me 02/04/2016 stored in Variable say Date4........ 
    

    然后我想将存储在每个变量中的值转换为YYYYMMDD

    例如:

    05/04/2016 to 20160405 ....
    04/04/2016 to 20160404 ....
    03/04/2016 to 20160403 ....
    02/04/2016 to 20160402 ....
    

1 个答案:

答案 0 :(得分:1)

在powershell的帮助下:

@echo off
for /l %%d in (0,1,4) do (
    for /f "tokens=*" %%i in ('powershell get-date -date $(get-date^).adddays(-%%d^) -format yyyyMMdd') do set _Date%%d=%%i
) 
set _date

解释(从TessellatingHeckler的评论中逐字复制 - 无法更好地制定它):

  

for / L是一个批处理文件循环,它对数字,1 2 3 4和每个进行计数   通过它的时间调用PowerShell脚本引擎与for / f命令   这是一个批处理文件的解决方法。 PowerShell命令获取   当前日期,添加-X天,然后得到结果日期,   并以您希望的方式格式化它并将其返回到批处理文件,   它返回一行文本,并在do部分中使用它   设置环境变量。 tokens = *告诉循环不要拆分   文本行,^是批量转义特殊字符   文件

for /l的工作方式如下:for /l %%i in (<start>, <step>, <end>)。在其他语言中,它会读取类似FOR i=<start> TO <end> STEP <step>

的内容

powershell命令汇总如下:

get-date - 今天的约会。

get-date -date <some date>获取<some date>的日期(似乎很荒谬,但实际上意味着“接受字符串<some date>并将其转换为有效日期”)。

现在将<some date>替换为$(get-date).adddays(x) - 这意味着“今天就行,并添加x天”

最后一步是使用-format <formatstring>

将结果日期格式化为所需的格式

您可以使用cmd或更详细的powershell get-help get-datepowershell Get-Help Get-Date -Online阅读powershell的帮助:"id": "101", "photo": { "$ref": "materialphotos", "$id": ObjectId("57041fc125e2433c200987ff") }, "material_name": "Something",