使用批处理文件计算工作日

时间:2013-03-13 14:52:59

标签: date batch-file command

我想写一个非常简单的批处理文件。

如果今天是03/13,我希望我的批处理文件输出:

“我会在03/15给你回电话”

因此需要日期和ADD 2个工作日。所以,如果它是03/15:

“我会在03/19给你回电话”

3 个答案:

答案 0 :(得分:2)

呃,别担心,它可以批量完成。 :) 这是我的一个实现(约150行代码)。

实施例

https://gist.github.com/DavidRuhmann/4666270

用法

做这样的事情来调整周末。

if "%Date:~0,3%"=="Thu" call :DaysAhead 4
if "%Date:~0,3%"=="Fri" call :DaysAhead 4
if "%Date:~0,3%"=="Sat" call :DaysAhead 3
if "%Date:~0,3%"=="Sun" call :DaysAhead 2
if "%Date:~0,3%"=="Mon" call :DaysAhead 2
if "%Date:~0,3%"=="Tue" call :DaysAhead 2
if "%Date:~0,3%"=="Wed" call :DaysAhead 2

答案 1 :(得分:2)

使用JScript计算日期,你就是黄金。

@if (@X)==(@Y) @end /* (batch + jscript hybrid script init)

:: *** Batch script *****

@echo off
setlocal
for /f %%I in ('cscript /nologo /e:jscript "%~f0"') do (
    echo I will call you back on %%I
)

goto :EOF

:: *** JScript script *****/
var dow = new Date().getDay();
var days = (dow > 4) ? 9 - dow : (dow == 4 ? 4 : 2);
var d = new Date(new Date().getTime() + (1000 * 60 * 60 * 24) * days);
WScript.echo((d.getMonth() + 1) + '/' + d.getDate());

如果今天是星期四,剧本将在下周一返回。周五至周日,接下来的周二。周一至周三,提前两天。而且您不必担心现场,闰年,跳蛙,月球周期等。

答案 2 :(得分:2)

下面的批处理文件可以执行您想要的操作:

@echo off
rem AddBusinessDays.bat date numOfDays
rem Antonio Perez Ayala

rem Convert the date to Julian Day Number + number of days
for /F "tokens=1-3 delims=/" %%a in ("%1") do (
   set /A mm=10%%a %% 100, dd=10%%b %% 100, yy=%%c
)
set /A a=mm-14, jd=(1461*(yy+4800+a/12))/4+(367*(mm-2-12*(a/12)))/12-(3*((yy+4900+a/12)/100))/4+dd-32075+2+%2, dow=jd%%7

rem Adjust Julian Day Number to avoid weekends
if %dow% lss 2 set /A jd+=2-dow

rem Convert Julian Day Number back to date
set /A l=jd+68569-2,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,dd=l-(2447*j)/80,l=j/11,mm=j+2-(12*l),yy=100*(n-49)+i+l

rem Assemble the result
if %dd% lss 10 set dd=0%dd%
if %mm% lss 10 set mm=0%mm%
set newDate=%mm%/%dd%/%yy%
echo %newDate%

参考:http://www.hermetic.ch/cal_stud/jdn.htm#comp

例如:

>echo %date%
03/13/2013

>AddBusinessDays.bat %date% 2
03/15/2013

>AddBusinessDays.bat %date% 3
03/18/2013

>AddBusinessDays.bat %date% 4
03/18/2013

>AddBusinessDays.bat %date% 5
03/18/2013

>AddBusinessDays.bat %date% 6
03/19/2013

安东尼奥

PS - 是的,我知道这种方法不适用于世界上所有人。好消息是我没有为他们所有人编写这个解决方案,但正是为了OP,尽管很容易为每台计算机修改它。例如,之前的程序 NOT 在我的计算机中工作,因为我的语言环境是DD / MM / YYYY,但我可以在之前的两行程序中交换ddmm我很确定这个世界上的大多数人也有能力这样做!的; - )