【问题标题】:Automating batch script based on end of month基于月末自动化批处理脚本
【发布时间】:2015-06-11 04:32:39
【问题描述】:

我们有一个运行月末流程的批处理文件。现在这是一个手动过程,但我们希望根据 EOM 下降的时间来自动化它。如果一个月的最后一个工作日是星期五(或其他工作日),我们会在星期五晚上或星期六运行脚本。如果它是在星期六或星期日,则脚本将在周末之后的星期一运行。可能有一些例外,但这是一般的想法。

我们无法确定如何根据日期自动执行此操作。将考虑任何选项。 Powershell、批处理等...

任何帮助将不胜感激。

编辑 - 它选择运行的日期可能有点随机。如果我们可以让它读入一个包含运行日期列表的文本文件,那也可以。

所以我们可以有一个日期列表,例如: 2015 年 4 月 30 日, 2015 年 5 月 31 日, 2015 年 6 月 29 日,

然后可以运行一个脚本,如果今天等于这些日期中的任何一个,则运行批处理文件。

【问题讨论】:

  • 一定要批量吗?为什么不只是 Windows 任务计划程序?这会简单得多 - 我想在那里做你的逻辑。
  • 那么...每月 1 号运行的计划任务?
  • @MathiasR.Jessen 不要这么认为,因为据我所知,6 月的 EOM 将于 7 月 3 日运行。 星期五晚上或星期六是我想知道的地方,因为那时我们应该猜测吗?
  • 执行此操作的一种简单方法是每天使用 Windows 任务调度程序运行脚本,并让脚本检查是否是实际做某事的正确时间。
  • @n3wjack 我认为这是操作人员想要的,但他需要帮助 让脚本检查是否是正确的时间

标签: powershell batch-file automation scheduled-tasks


【解决方案1】:

逻辑对我来说并不完全清楚,但正如上面评论中所说,您可以每天(或仅在星期五/星期一?)使用 Windows 任务计划程序运行 PowerShell 脚本,并让该脚本检查时间是否合适做某事的权利。

据我所知,它必须在周五或周一运行。 您可以使用Get-Date 命令在 PowerShell 中获取当前日期。 如果你通过Get-Member 传递它,你可以看到你在日期对象上拥有的所有方法,以确定时间是否适合做某事。

get-date | get-member

您可能需要一些这样的方法或属性来实现检查:

$today = get-date 
$today.DayOfWeek         # prints e.g. "Monday"
$today.DayOfWeek -eq 1   # Returns True on Monday
$today.AddDays(1)        # Next day, the number can be negative or positive
$today.Day              # Returns 6 right now (april 6th)

【讨论】:

    【解决方案2】:

    有很多资源都在讨论如何调用PowerShell script in Task Scheduler。如果您当前所做的是运行批处理,则将您的任务配置为在每天下午 5:00 运行,检查日期与文本文件中的所有日期。

    $milestones = Get-Content c:\temp\dates.txt
    $today = Get-Date -Format "MM-dd-yyyy"
    If($milestones -contains $today){
        # Do stuff and things. 
        # cmd.exe /K C:\Path\To\Batch.bat
    }
    

    如果文本文件“c:\temp\dates.txt”中有一行表示“04-06-2015”将满足If 条件。然后您可以使用cmd 取消注释该行并根据需要进行更新。

    如果您对这些概念有疑问,建议您在提问前进行一些研究。如果您在那之后仍然被卡住,请编辑您的问题以提出新问题。

    【讨论】:

      猜你喜欢
      • 2020-12-14
      • 2013-04-08
      • 2015-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多