【问题标题】:Windows batch/script code to conditionally process based on date value in text fileWindows批处理/脚本代码根据文本文件中的日期值有条件地处理
【发布时间】:2012-09-12 03:24:25
【问题描述】:

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

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

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

感谢您的宝贵时间

【问题讨论】:

  • 你问了一个非常不具体的问题,而且信息很少。如果日期在文本文件中,日期会在文本文件中任何行的中间,还是总是单独一行?日期之前是否会出现DATE: 之类的内容?日期的格式是什么? Fri 09/14/2012? 09/14/2012? 09/14/12? 2012/09/14? 12/09/14?如果日期在文件名中,它会在哪里?名字的前面?中间?结束?再说一遍,什么格式?
  • 好吧,正如我所说,我控制创建文本文件的过程。因此,在创建批处理文件方面几乎没有经验,我不确定如何创建日期或将其放置在何处,但它可能是最有意义的

标签: vbscript batch-file cmd


【解决方案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

【讨论】:

    【解决方案2】:

    windows日期命令非常有限,可以试试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
    

    【讨论】:

      【解决方案3】:

      此代码的优点是您可以像这样将当前日期放入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
      

      在九月份运行时,上面的代码将显示:

      Enter month for date.txt [1-12, Default = 8, Q = Quit]:
      

      您可以输入从 1 到 12 的任何月份(任何高于或低于前一年的数字),按 ENTER 输入默认月份,或键入 QENTER退出程序。

      默认月份总是比当前月份早一个月。所以如果当前月份是一月,默认是12。如果当前月份是十二月,默认是11。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-28
        • 1970-01-01
        • 2011-10-04
        • 2014-08-22
        • 1970-01-01
        • 1970-01-01
        • 2013-05-16
        • 1970-01-01
        相关资源
        最近更新 更多