我正在使用 Windows XP。该代码可用于批处理文件或 VBscript。我打算使用 Windows 调度程序来运行程序。
我需要代码来从文本文件中读取日期(可能是文本文件中的唯一行,或者日期可以包含在文件名中,我控制生成文件的过程)然后代码需要评估文本文件日期与当前日期的对比,以确认文本文件日期来自上个月。
我开始构建一个流程,以便在刷新每月数据后能够运行每月 1 日的作业。我是使用批处理/脚本文件构建这种过程的新手。
谢谢你的时间
我正在使用 Windows XP。该代码可用于批处理文件或 VBscript。我打算使用 Windows 调度程序来运行程序。
我需要代码来从文本文件中读取日期(可能是文本文件中的唯一行,或者日期可以包含在文件名中,我控制生成文件的过程)然后代码需要评估文本文件日期与当前日期的对比,以确认文本文件日期来自上个月。
我开始构建一个流程,以便在刷新每月数据后能够运行每月 1 日的作业。我是使用批处理/脚本文件构建这种过程的新手。
谢谢你的时间
windows date命令很有限,可以试试realdate
realdate.com /f="DD" /s="set DAY=" >tmpdt.bat
call tmpdt.bat
if !%DAY%! == !%01%! (
echo not first day
exit 0
)
do your stuff here
处理日期batch
并非不可能,但真的非常难看。我建议使用VBScript
这个(或者PowerShell
如果这是你的选择)。
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("C:\PATH\TO\your_file_2012-07-23.txt")
fileDate = CDate(Right(fso.GetBaseName(f.Name), 10))
If Month(DateAdd("m", 1, fileDate)) = Month(Now) Then
WScript.Echo f.Name & " is from the previous month."
End If
此代码的优点是您可以date.txt
像这样将当前日期放入:
echo %date%>date.txt
然后要在该日期采取行动,您只需要该行后面的代码:
set lastmonth=
代码如下:
@echo off
:Beginagain
set lastmonth= %date:~4,2%
set /a lastmonth=%lastmonth: 0=%-1
echo.
set /p lastmonth=Enter month for date.txt [1-12, Default = %lastmonth%, Q = Quit]:
if %lastmonth%==Q goto :eof
if %lastmonth%==q goto :eof
set year=%date:~-4%
if %lastmonth% leq 0 (
set lastmonth=12
set /a year=year-1
)
if %lastmonth% lss 10 set lastmonth=0%lastmonth%
echo %date:~,4%%lastmonth%/%date:~7,2%/%year% > date.txt
set year=
set lastmonth=
set /p olddate=<date.txt
set olddate= %olddate:~4,2%
set olddate=%olddate: 0=%
set thismonth= %date:~4,2%
set thismonth=%thismonth: 0=%
set /a diff=thismonth-olddate
if %diff% lss 0 (
echo Date from Last Year
) else if %diff%==0 (
echo Date from this month
) else if %diff%==1 (
echo Date from last month
) else if %diff% gtr 1 (
echo Date from before last month
)
goto :Beginagain
上面的代码允许你通过循环来试验不同的月份,直到你选择 [Q]uit。
如果您使用默认选项,它将始终输出:
Date from last month
在 9 月份运行时,上面的代码将显示:
Enter month for date.txt [1-12, Default = 8, Q = Quit]:
您可以输入从 1 到 12 的任何月份(任何高于或低于前一年的数字),按ENTER默认月份,或键入QENTER退出程序。
默认月份总是比当前月份早一个月。因此,如果当前月份是 1 月,则默认值为 12。如果当前月份是 12 月,则默认值为 11。