0

我正在使用 Windows XP。该代码可用于批处理文件或 VBscript。我打算使用 Windows 调度程序来运行程序。

我需要代码来从文本文件中读取日期(可能是文本文件中的唯一行,或者日期可以包含在文件名中,我控制生成文件的过程)然后代码需要评估文本文件日期与当前日期的对比,以确认文本文件日期来自上个月。

我开始构建一个流程,以便在刷新每月数据后能够运行每月 1 日的作业。我是使用批处理/脚本文件构建这种过程的新手。

谢谢你的时间

4

3 回答 3

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
于 2012-09-12T03:34:30.407 回答
1

处理日期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
于 2012-09-12T10:35:28.650 回答
0

此代码的优点是您可以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。

于 2012-09-15T18:09:58.967 回答