根据特定文本执行操作?一个Windows脚本

时间:2012-06-27 09:26:52

标签: windows command-line batch-file

考虑我有一个包含以下信息的文本文件:

TIMESTARTED=Thu Nov 17 09:43:47 GMT 2011
START-OF-DATA
TEXT TEXT TEXT

TIMESTARTED行位于文本文件中的特定行上,我需要创建某种验证,以确保在执行特定任务之前此处的日期是正确的。我基本上希望它看一下计算机上的日期,看看它是否与TIMESTARTED =之后的日期相对应,如果是,它应该运行一个batscript,如果没有,它应该运行一个不同的bat脚本。

我不知道这是否可行或是否需要大量编程?如果只能通过在Windows中编写脚本来实现这一点,我更愿意。任何人都可以带我走正确的道路吗? (请记住,我不是程序员,所以尽可能简单)

2 个答案:

答案 0 :(得分:1)

这是jeb的解决方案略微修改为使用数组而不是地图字符串,仅用于比较目的(并促进在批处理中使用数组):

setlocal EnableDelayedExpansion

for /F "tokens=2,3 delims= " %%A in ('findstr /B "TIMESTARTED" html_2.txt') do (
  set "monthName=%%A"
  set "day=%%B"
)
set "year=%date:~-4%"
for %%a in ("Jan=01" "Feb=02" "Mar=03" "Apr=04" "May=05" "Jun=06" "Jul=07" "Aug=08" "Sep=09" "Oct=10" "Nov=11" "Dec=12") do set %%~a
set "month=!%monthName%!"

set "timestarted=%day%.%month%.%year%"
if "%timestarted%" == "%DATE%" (
  echo The date is correct
) ELSE (
  echo wrong date %timestarted%
)

答案 1 :(得分:0)

您可以先选择findstr行,然后将日期与%date%的当前日期进行比较。

setlocal EnableDelayedExpansion

for /F "tokens=2,3 delims= " %%A in ('findstr /B "TIMESTARTED" html_2.txt') do (
  set "monthName=%%A"
  set "day=%%B"
)
set "year=%date:~-4%"
SET map=Jan-01;Feb-02;Mar-03;Apr-04;May-05;Jun-06;Jul-07;Aug-08;Sep-09;Oct-10;Nov-11;Dec-12
SET "v=!%map:*%monthName%-=!"
set "month=!v:~0,2!"

set "timestarted=%day%.%month%.%year%"
if "%timestarted%" == "%DATE%" (
  echo The date is correct
) ELSE (
  echo wrong date %timestarted%
)