bat脚本-仅在给定的多个不同日期运行命令

时间:2018-07-30 18:56:15

标签: date batch-file comments

在我们的环境中,我们在服务器(3台服务器)上有一个bat脚本,假设该脚本可以在应用程序支持团队提供给我们的多个给定日期上运行。我们正在使用的当前解决方案是登录到每台服务器,并注释或取消注释某一行以使命令运行或不运行。这是非常繁琐的工作,容易使我们忘记对其进行评论。

有更好的解决方案吗?例如在脚本中设置多个日期,然后脚本检查给定日期是否匹配,是否比在特定行上运行命令否则绕过它?

以下是命令运行的日期,并且该日期不必采用任何特定格式。应用程序团队根据每年的日程安排提供此日期。

5月20日 6月3日 6月17日 7月1日 7月15日 7月29日 8月12日 8月26日 9月9日 9月23日 10月7日

任何评论或建议都值得赞赏。

2 个答案:

答案 0 :(得分:0)

所以这是我已经实施的解决方案,至少在我的情况下效果很好。

@ECHO OFF

REM Determine Today's Date
for /f %%i in ('PowerShell -Command "Get-Date -uformat '%%Y%%m%%d'"') do (
    set "currDate=%%i"
)

REM set flags as false.
SET RUNJOB=False

REM set approved dates and compare today's date to provided dates. 
if %currDate% == 20180812  set RUNJOB=True
if %currDate% == 20180826  set RUNJOB=True
if %currDate% == 20180909  set RUNJOB=True
if %currDate% == 20180923  set RUNJOB=True
if %currDate% == 20181007  set RUNJOB=True

REM if date matches then the command will run. 
if %RUNJOB%==True ( 


        REM Place the command under this line. 

                )              

)

答案 1 :(得分:0)

根据您的自我回答,如果您将其结构如下,则可能会使阅读和维护变得容易一些:

@Echo Off
Set "ToDayt="
For /F %%A In ('RoboCopy/NJH /L "\|" Null'
) Do If Not Defined ToDayt Set "ToDayt=%%A"
If Not Defined ToDayt Exit /B
FindStr /X "%ToDayt%" "%0">Nul || Exit /B

Rem your commands here
Echo Today is the day
Pause

Exit /B

:: Run dates [YYYY/MM/DD]
2018/05/20
2018/06/03
2018/06/17
2018/07/01
2018/07/15
2018/07/29
2018/08/12
2018/08/26
2018/09/09
2018/09/23
2018/10/07

您可以根据需要更改或附加日期,而无需更改/影响代码