2016-04-06 2 views
0

Это то, что я хотел бы сделать:Как получить текущую дату - 1, -2, -3, -4 в пакетном

  1. Получить текущую дату, который легко ---% DATE%
  2. DO Current Date - 1, который я не могу получить, поскольку я пробовал разные варианты.

Я хотел бы получить последние 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........ 

тогда я хотел бы, чтобы преобразовать значение, хранящееся в каждой из этих переменных в ГГГГММДД

Для экс:

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

много [дубликатов] (http://stackoverflow.com/search?q =% 5Bbatch-file% 5D + get + yesterdays + date) доступно – Stephan

+2

Возможный дубликат [Batch File - получение дат дня и применение в текущем пакетном файле] (http://stackoverflow.com/questions/28767114/batch-file -getting-yesterdays-date-and-apply-in-current-batch-file) – SomethingDark

+0

Извините, ребята, но я довольно новичок в партии, и все они выглядят довольно сложными для меня .... Я думал, это будет так же просто, как делать «% DATE% -1», но это не выглядит так просто .... Также они не отображают преобразование в формат YYYYMMDD. – irish

ответ

0

с небольшой помощью 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 - а не мог сформулировать это лучше):

для/L представляет собой цикл пакетный файл, который подсчитывает число, 1 2 3 4, и каждый время через него вызывает сценарий сценария PowerShell с командой for/f , которая является частью обходного файла пакетного файла. Команда PowerShell получает текущую дату, добавляет к ней -X дней, затем получает итоговую дату, и форматирует ее так, как вы хотите, и возвращает ее в пакетный файл , который получает одну строку текста назад и использует что в разделе do до задайте переменную окружения. Маркеры = * указывает цикл не расколоть строку текста вверх, и^должны экранировать специальные символы в пакете файлы

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>

вы можете прочитать помощь Powershell от cmd с powershell get-help get-date или более подробно: powershell Get-Help Get-Date -Online

+0

Ты гений @Stephan ..... !!! Большое спасибо! .... Не могли бы вы немного объяснить этот сценарий? – irish

+0

Спасибо @TessellatingHeckler, у меня есть несколько вопросов, если вы не возражаете, отвечая на них здесь? – irish

+1

@irish Спросите, но ответ, вероятно, «это подделка, потому что пакетные файлы крайне ограничены, а интересным вещам требуется обходное решение внутри обходного пути». – TessellatingHeckler

Смежные вопросы