2015-09-24 1 views
0

Моя программа нуждается в двух аргументах командной строки для запуска: start_date и end_date.Генерировать значения yyyyMMdd для аргументов в программе

Я хочу, чтобы мой .bat файла генерировать эти значения автоматически, так что start_date всегда будут иметь значение от M дней назад и end_date будет содержать значение N дней назад. Они также должны быть в формате yyyyMMdd.

E.g. если M=10, N=5 и сегодня 25 сентября 2015 года, моя программа должна работать со следующими параметрами:

MyProgram.exe "start_date:20150915" "end_date:20150920" 

Как я могу добиться этого, используя только команды пакетного файла?

+1

Чистая партия ужасно на момент математики. Я бы использовал гибрид JScript. Вы также можете использовать PowerShell, но JScript или VBScript будут быстрее. – rojo

+0

@rojo Я не умею ни в одном. Можете ли вы мне помочь? – Disasterkid

+1

Обратите внимание, что SO не является бесплатной службой записи кода; поэтому попробуйте сами и задайте конкретный вопрос, когда застряли ... – aschipfl

ответ

1
@echo off 
setlocal EnableDelayedExpansion 

set /A M=10, N=5 

rem Separate current date in DD, MM and YYYY parts: 
rem Modify next line accordingly to your locale date format (this one use "MM/DD/YYYY") 
for /F "tokens=1-3 delims=/" %%a in ("%date%") do set /A mm=1%%a-100, dd=1%%b-100, yyyy=%%c 

rem Convert today's date to Julian Day Number 
call :DateToJulian %dd% %mm% %yyyy% today= 

rem Subtract the given numbers of days 
set /A start_date=today-M, end_date=today-N 

rem Convert the new Julian Day Numbers back to dates 
call :JulianToDate %start_date% start_date= 
call :JulianToDate %end_date% end_date= 

echo MyProgram.exe "start_date:%start_date%" "end_date:%end_date%" 
goto :EOF 


rem Convert a Date to Julian Day Number 
:DateToJulian Day Month Year Julian= 
set /A a=(%2-14)/12, %4=(1461*(%3+4800+a))/4+(367*(%2-2-12*a))/12-(3*((%3+4900+a)/100))/4+%1-32075 
exit /B 

rem Convert a Julian Day Number to Date in YYYYMMDD format 
:JulianToDate Julian YYYYMMDD= 
set /A l=%1+68569,n=(4*l)/146097,l=l-(146097*n+3)/4,i=(4000*(l+1))/1461001,l=l-(1461*i)/4+31,j=(80*l)/2447 
set /A dd=100+l-(2447*j)/80,l=j/11,mm=100+j+2-(12*l),yyyy=100*(n-49)+i+l 
set "%2=%yyyy%%mm:~1%%dd:~1% 
exit /B 

Reference: http://www.hermetic.ch/cal_stud/jdn.htm#comp 
Смежные вопросы