Board logo

标题: [已结]检测系统存活的程式 [打印本页]

作者: win007     时间: 2008-11-22 14:41    标题: [已结]检测系统存活的程式

哪位能人能写这样一个检测系统存活的程式 描述: 检测程式查看一个X.log的文本里的时间,类似2008-11-1 12:00:00 这样的格式,因为log当中每3分钟会刷新一次,所以时间也会变,现在我的思路是用程式抓到的最新也就是最大的时间和系统时间做比对,超过5分钟,则说明系统的log已经没有再生成(系统已经死了),然后确认死了之后,在连接上oracle的一个DB,把一些栏位的资料 insert into 到一张用来发送alarm mail的table当中去(发送的例如:PETER,6543,PETER@126.com)去。不知道bat文档能否实现。 先谢过了 [ Last edited by HAT on 2008-11-26 at 13:41 ]

作者: win007     时间: 2008-11-22 15:41
在线等 急 高手请进~

作者: HAT     时间: 2008-11-22 23:46
@echo off
set SrcFile=C:\test\X.log
set SrcPath=%SrcFile:\=\\%
for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do set Today=%%a
for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get CreationDate /value') do set FileDay=%%a
set /a MinusD=%Today:~0,8%-%FileDay:~0,8%
set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4%
if %MinusD% leq 0 (
  if %MinusT% gtr 5 (
    goto :Oracle
  )
) else (
  goto :Oracle
)

:Oracle
set oraName=USERNAME
set oraPass=PASSWORD
set oraDB=DATABASENAME
set oraSql=%temp%\myOra.sql
>"%oraSql%" echo conn %oraName%/%oraPass%@%oraDB%
rem 请参照上面一句代码的格式自行添加insert语句
start sqlplus /nolog @"%oraSql%"

作者: win007     时间: 2008-11-23 02:05
set SrcPath=%SrcFile:\=\\% 这行需要改吗 >"%oraSql%" echo conn %oraName%/%oraPass%@%oraDB% 按照上面 是不是把insert into的语句写在oraSql.sql中去啊 还是要写在bat里面啊 例如 >"%oraSql%" inert into *****_tbl; value ( ) [ Last edited by win007 on 2008-11-23 at 02:20 ]

作者: win007     时间: 2008-11-23 02:10
请问 您写的是文件修改时间和系统时间做比较吗?

作者: HAT     时间: 2008-11-23 02:47
set SrcPath=%SrcFile:\=\\% 这行需要改吗
不需要改
>"%oraSql%" echo conn %oraName%/%oraPass%@%oraDB% 按照上面 是不是把insert into的语句写在oraSql.sql中去啊 还是要写在bat里面啊 例如 >"%oraSql%" inert into *****_tbl; value ( )
目的是写到oraSql.sql文件里面 >"%oraSql%" echo inert into xxx
请问 您写的是文件修改时间和系统时间做比较吗?
是的

作者: win007     时间: 2008-11-23 11:14
@echo off set SrcFile=G:a.txt set SrcPath=%SrcFile:\=\\% for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do set Today=%%a for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get CreationDate /value') do set FileDay=%%a set /a MinusD=%Today:~0,8%-%FileDay:~0,8% set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4% if %MinusD% leq 0 ( if %MinusT% gtr 5 ( goto :echo"The system is down" ) ) else ( goto :echo"The system is running" ) pause 由于在测试的时候,我想用大于5min并且小于0 min,显示system is down 而否则 就显示system is running 但是没有达到预期的目的 望 斑竹 指教

作者: win007     时间: 2008-11-23 11:38
@echo off set SrcFile=G:a.txt set SrcPath=%SrcFile:\=\\% for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do set Today=%%a for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get CreationDate /value') do set FileDay=%%a set /a MinusD=%Today:~0,8%-%FileDay:~0,8% set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4% if %MinusD% leq 0 ( if %MinusT% gtr 5 ( echo "The system is down" ) ) else ( echo "The system is running" ) pause 显示结果: 无可用范例 运算符不存在 “The system is running" 不知为何? system应该按条件来说已经死了

作者: HAT     时间: 2008-11-23 11:49    标题: Re 8楼

第二行少了一个斜线,应为: set SrcFile=G:\a.txt 请修改以后重新测试

作者: win007     时间: 2008-11-23 12:33
@echo off set SrcFile=G:\a.txt set SrcPath=%SrcFile:\=\\% for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do set Today=%%a for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get CreationDate /value') do set FileDay=%%a set /a MinusD=%Today:~0,8%-%FileDay:~0,8% set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4% if %MinusD% leq 0 ( if %MinusT% gtr 5 ( echo "The system is down" ) ) else ( echo "The system is running" ) pause 虽然改过,但是还是结果是 The system is running 事实上 a.txt 是昨天更新的 到现在没有更新过,应该显示的是 The system is down 不知为何?

作者: HAT     时间: 2008-11-23 13:20
@echo off
set SrcFile=G:\a.txt
set SrcPath=%SrcFile:\=\\%
for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do (
  set Today=%%a
)
for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get CreationDate /value') do (
  set FileDay=%%a
)
set /a MinusD=%Today:~0,8%-%FileDay:~0,8%
set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4%
echo %Today%
echo %FileDay%
echo %MinusD%
echo %MinusT%
if %MinusD% leq 0 (
  if %MinusT% gtr 5 (
    echo "The system is down"
  ) else (
    echo "The system is running"
  )
) else (
  echo "The system is down"
)
pause
结果贴出来看看 [ Last edited by HAT on 2008-11-23 at 13:22 ]

作者: win007     时间: 2008-11-23 13:37
结果如下: 20081123130705.781000+480 20081121213832.420000+480 2 -825 "The system is down"1 我刚刚手动更新 a.txt,结果也如上

作者: win007     时间: 2008-11-23 13:40
结果如下: 20081123130705.781000+480 20081121213832.420000+480 2 -825 "The system is down" 没有”1“

作者: HAT     时间: 2008-11-23 13:59
加上变量初始化,再试试。
@echo off
set SrcFile=G:\a.txt
set SrcPath=%SrcFile:\=\\%
set Today=
set FileDay=
set MinusD=
set MinusT=
for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do (
  set Today=%%a
)
for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get LastModified /value') do (
  set FileDay=%%a
)
set /a MinusD=%Today:~0,8%-%FileDay:~0,8%
set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4%
echo %Today%
echo %FileDay%
echo %MinusD%
echo %MinusT%
if %MinusD% leq 0 (
  if %MinusT% gtr 5 (
    echo "The system is down"
  ) else (
    echo "The system is running"
  )
) else (
  echo "The system is down"
)
pause
原来是第二个wmic取错数据了,已更新。 [ Last edited by HAT on 2008-11-23 at 14:03 ]

作者: win007     时间: 2008-11-23 14:11
@echo off set SrcFile=G:\a.txt set SrcPath=%SrcFile:\=\\% set Today= set FileDay= set MinusD= set MinusT= for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do ( set Today=%%a ) for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get LastModified /value') do ( set FileDay=%%a ) set /a MinusD=%Today:~0,8%-%FileDay:~0,8% set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4% echo %Today% echo %FileDay% echo %MinusD% echo %MinusT% if %MinusD% leq 0 ( if %MinusT% gtr 5 ( goto :Oracle ) else ( echo "The syestem is runnning" ) ) else ( goto :Oracle ) :Oracle set oraName=USERNAME set oraPass=PASSWORD set oraDB=DATABASENAME set oraSql=%temp%\myOra.sql >"%oraSql%" echo conn %oraName%/%oraPass%@%oraDB% rem 请参照上面一句代码的格式自行添加insert语句 start sqlplus /nolog @"%oraSql%" 改过连接DB的代码 如上: 如果系统活着就不用去,连接DB,自动关闭,请问以上代码写的正确吗?

作者: HAT     时间: 2008-11-23 14:14    标题: Re 15楼

正确 可以把多余的代码删除了: echo %Today% echo %FileDay% echo %MinusD% echo %MinusT%

作者: win007     时间: 2008-11-24 17:07
@echo off set SrcFile=D:\a.txt set SrcPath=%SrcFile:\=\\% set Today= set FileDay= set MinusD= set MinusT= for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do ( set Today=%%a ) for /f "tokens=2 delims==" %%a in ('wmic path CIM_logicalfile where name^="%SrcPath%" get LastModified /value') do ( set FileDay=%%a ) set /a MinusD=%Today:~0,8%-%FileDay:~0,8% set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4% if %MinusD% leq 0 ( if %MinusT% gtr 5 ( echo "the system has been down" ) else ( echo "the system is running" ) ) else ( echo "the system has been down" ) pause 结果如下: ‘wmic' 不是内部命令和外部命令,也不是可以运行的程序 或批处理文件。 ‘wmic' 不是内部命令和外部命令,也不是可以运行的程序 或批处理文件。 无效数字。数字常数只能是十进制<17>,十六进制<0x11>或 八进制<021>。 运算符不存在。 "the system is running" 请按任意键继续... 不知道是不是环境问题,测试不通过,事实上system已经死了 [ Last edited by win007 on 2008-11-24 at 17:09 ]

作者: HAT     时间: 2008-11-24 17:15    标题: Re 17楼

操作系统的具体版本是什么?精简版的系统? 开始,运行,cmd,wmic,结果如何?

作者: win007     时间: 2008-11-24 17:21
操作系统是 windows2000 运行cmd -->wmic 结果如下 wmic' 不是内部命令和外部命令,也不是可以运行的程序 或批处理文件。

作者: HAT     时间: 2008-11-24 18:03    标题: Re 19楼

Win2k系统没有wmic,你可以换一种方案,通过对%date%和%time%变量进行截取。你先自己尝试一下吧,遇到具体再问。

作者: win007     时间: 2008-11-24 20:33
斑竹能不能给个sample啊 因为学了没有几天,我对bat中变量还不会运用,确实比较急。 [ Last edited by win007 on 2008-11-24 at 20:40 ]

作者: HAT     时间: 2008-11-24 20:57
分别运行下面两条命令,把结果贴出来看看: echo %date% %time% dir /tw

作者: win007     时间: 2008-11-25 09:26
echo %date% %time% > 1.txt 结果如下: 星期二 2008/11/25 8:56:28.38 dir /tw > 2.txt 结果如下: 驱动器 D 中的卷是 program 卷的序列号是 68A2-D7A9 d:\Documents and Settings\cy_pjhuang\桌面 的目录 2008/11/25 08:57a <DIR> . 2008/11/25 08:57a <DIR> .. 2008/11/25 08:56a 32 1.txt 2008/11/25 08:57a 0 2.txt 2008/11/24 04:31p 7,222,784 chart information to zq.xls 2008/11/20 01:52p 30,720 chartmaintain.xls 2008/11/25 08:45a 429 CIM Desktop.LNK 2008/11/21 11:40a 66,402 CMD命令速查手册.htm 2008/11/19 05:27p 1,835 CMD查询手册.bat 2008/09/11 03:10p 537 group by.txt 2008/11/19 01:45p 27,648 issue.xls 2008/11/24 02:34p 1,488 monitor+sql1.bat 2008/11/24 04:36p 671 monitor.bat 2008/11/21 10:34a 843 send mail.txt 2008/09/08 02:28p 601 Terminal Services Client.lnk 2008/10/31 04:15p 23,040 TF PVD SPC CHART 2008.10.30.xls 2008/11/11 01:15p 18,432 TF PVD SPC CHART for IT 08.11.03.xls 2006/06/08 10:04a 656,896 TSnap.exe 2008/07/29 12:56p 519 Windows Media Player.lnk 2008/11/18 03:13p 1,674,240 分类资讯.xls 2008/08/08 01:29p 539 快捷方式 MSTSC.EXE.lnk 2008/08/08 01:35p 509 快捷方式 plsqldev.exe.lnk 2008/08/06 04:05p 405 快捷方式 ReportView.exe.lnk 2008/11/19 11:17a 405 快捷方式 SPCChartor.exe.lnk 2008/08/06 02:24p 383 快捷方式 Tmgui.exe.lnk 2008/08/21 03:35p 598 快捷方式 Welcome57.pdf.lnk 2008/11/25 08:57a 23 新建 文本文档.bat 25 个文件 9,729,979 字节 2 个目录 36,331,675,648 可用字节

作者: HAT     时间: 2008-11-25 10:02
dir命令的结果,是用a和p来表示上午、下午的。请把系统时间改成下午,再运行一遍echo %date% %time%,把结果贴出来看看。

作者: win007     时间: 2008-11-25 10:18
时间改成下午9:53后 执行 echo %date% %time% 结果如下: 星期二 2008/11/25 21:53:54.40

作者: HAT     时间: 2008-11-25 11:17
本帖中我提供的方法在理论上来说都是错误的,都可能发生误判,建议不要使用。
@echo off
set SrcFile=D:\a.txt
set Today=
set FileDay=
set MinusD=
set MinusT=
set Today=%date:~4,4%%date:~9,2%%date:~12,2%%time:~15,2%%time:~18,2%
for /f "skip=5 tokens=1-2 delims= " %%a in ('dir /tw %SrcFile%') do (
  set FileDay=%%a%%b
  goto :compare
)
:compare
set FileDayT=%FileDay%
set FileDay=%FileDay:~0,4%%FileDay:~5,2%%FileDay:~8,2%%FileDay:~12,2%%FileDay:~15,2%
set /a MinusD=%Today:~0,8%-%FileDay:~0,8%
set /a MinusT=1%Today:~8,4%-1%FileDay:~8,4%
if "%FileDayT:~-1%" equ "p" (
  set /a MinusT-=1200
)
if %MinusD% leq 0 (
  if %MinusT% gtr 5 (
    echo "The system is down"
  ) else (
    echo "The system is running"
  )
) else (
  echo "The system is down"
)
pause

作者: win007     时间: 2008-11-25 11:32
测试过了 只要手动 更新a.txt,显示The system is running 就算手动调整系统时间往后移时间,都显示The system is running,不会出现The sysytem is down

作者: HAT     时间: 2008-11-25 15:42
使用了 Ritchie Lawrence 的日期时间转换算法
@echo off
set SrcFile=D:\a.txt
for /f "skip=5 tokens=1-2 delims= " %%a in ('dir /tw "%SrcFile%"') do (
  set "FileDay=%%a %%b"
  goto :compare
)
:compare
REM set "FileDay=2008/11/25 20:57"
call :DateToMins %FileDay:~0,4% %FileDay:~5,2% %FileDay:~8,2% %FileDay:~11,2% %FileDay:~14,3% mFileDay
echo FileDay: %FileDay:~0,4% %FileDay:~5,2% %FileDay:~8,2% %FileDay:~11,2% %FileDay:~14,3% mFileDay
echo FileDay2Minutes: %mFileDay%
REM set "mydate=星期二 2008/11/25 15:53:54.40"
set Today=%date:~4,4%%date:~9,2%%date:~12,2%%time:~15,2%%time:~18,2%
call :DateToMins %mydate:~4,4% %mydate:~9,2% %mydate:~12,2% %mydate:~15,2% %mydate:~18,2% mToday
echo Today: %mydate:~4,4% %mydate:~9,2% %mydate:~12,2% %mydate:~15,2% %mydate:~18,2% mToday
echo Today2Minutes: %mToday%
set /a mMinus=mToday-mFileDay
echo Minus: %mMinus%
if %mMinus% gtr 5 (
  echo "The system is down"
) else (
  echo "The system is running"
)
pause
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DateToMins %yy% %mm% %dd% %hh% %mm% result
::
:: By:   Ritchie Lawrence, updated 2003-04-03. Version 1.1
::
:: Func: Returns the number of elapsed minutes since 1970-01-01 00:00
::       for a given date. For NT4/2K/XP/2003
:: 
:: Args: %1 years to convert, 2 or 4 digit (by val)
::       %2 months to convert, 1/01 to 12, leading zero ok (by val)
::       %3 days to convert, 1/01 to 31, leading zero ok (by val)
::       %4 hours to convert, 1/01 to 12 for 12hr times (minutes must be
::          suffixed by 'a' or 'p', 0/00 to 23 for 24hr clock (by val)
::       %5 mins to convert, 00-59 only, suffixed by a/p if 12hr (by val)
::       %6 var to receive number of elapsed minutes (by ref)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
if 1%hh% LSS 20 set hh=0%hh%
if {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
if {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00
if {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2%
set /a hh=100%hh%%%100,nn=100%nn%%%100,j=j*1440+hh*60+nn
endlocal&set %6=%j%&goto :EOF

作者: win007     时间: 2008-11-25 16:59
刚刚测试过 结果如下: FileDay: 2008 11 25 04 35p mFileDay FileDay2Minutes: 20460515 无效数字。数字常数只能是十进制(17),十六位进制(0x11)或 八进制(021)。 无效数字。数字常数只能是十进制(17),十六位进制(0x11)或 八进制(021)。 Today: ~4,4mydate:~9,2mydate:~12,2mydate:~15,2mydate:~18,2 mToday Today2Minutes: Minus: -20460515 "The system is running" 请按任意键继续 . . .

作者: HAT     时间: 2008-11-25 17:30
下午工作比较忙,太粗心了。
@echo off
set SrcFile=D:\a.txt
for /f "skip=5 tokens=1-2 delims= " %%a in ('dir /tw "%SrcFile%"') do (
  set "FileDay=%%a %%b"
  goto :compare
)
:compare
REM set "FileDay=2008/11/25 20:57"
call :DateToMins %FileDay:~0,4% %FileDay:~5,2% %FileDay:~8,2% %FileDay:~11,2% %FileDay:~14,3% mFileDay
echo FileDay: %FileDay:~0,4% %FileDay:~5,2% %FileDay:~8,2% %FileDay:~11,2% %FileDay:~14,3% mFileDay
echo FileDay2Minutes: %mFileDay%
REM set "mydate=星期二 2008/11/25 15:53:54.40"
call :DateToMins %date:~4,4% %date:~9,2% %date:~12,2% %time:~15,2% %time:~18,2% mToday
echo Today: %date:~4,4% %date:~9,2% %date:~12,2% %time:~15,2% %time:~18,2% mToday
echo Today2Minutes: %mToday%
set /a mMinus=mToday-mFileDay
echo Minus: %mMinus%
if %mMinus% gtr 5 (
  echo "The system is down"
) else (
  echo "The system is running"
)
pause
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DateToMins %yy% %mm% %dd% %hh% %mm% result
::
:: By:   Ritchie Lawrence, updated 2003-04-03. Version 1.1
::
:: Func: Returns the number of elapsed minutes since 1970-01-01 00:00
::       for a given date. For NT4/2K/XP/2003
:: 
:: Args: %1 years to convert, 2 or 4 digit (by val)
::       %2 months to convert, 1/01 to 12, leading zero ok (by val)
::       %3 days to convert, 1/01 to 31, leading zero ok (by val)
::       %4 hours to convert, 1/01 to 12 for 12hr times (minutes must be
::          suffixed by 'a' or 'p', 0/00 to 23 for 24hr clock (by val)
::       %5 mins to convert, 00-59 only, suffixed by a/p if 12hr (by val)
::       %6 var to receive number of elapsed minutes (by ref)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
if 1%hh% LSS 20 set hh=0%hh%
if {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
if {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00
if {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2%
set /a hh=100%hh%%%100,nn=100%nn%%%100,j=j*1440+hh*60+nn
endlocal&set %6=%j%&goto :EOF

作者: win007     时间: 2008-11-25 17:41
请问在哪里加pause 可以测试

作者: HAT     时间: 2008-11-25 18:04
我不是加了pause了么?

作者: win007     时间: 2008-11-25 20:03
但是运行没有停顿,不能测试,请指教

作者: HAT     时间: 2008-11-25 20:08
那你就在每一句后面都加pause

作者: win007     时间: 2008-11-25 20:33
我测试以后 结果如下: FileDay: 2008 11 25 19 59 mFileDay FileDay2Minutes: 20460719 没有进行判定?

作者: HAT     时间: 2008-11-25 22:51
你家里的系统不是xp么?日期时间的格式跟23楼一样么?每一句都加pause结果就输出了35楼这么点结果?

作者: win007     时间: 2008-11-25 23:16
哦 明白了 我明天去公司去测试下

作者: HAT     时间: 2008-11-25 23:32
如果需要在家里的XP系统上测试,请根据实际日期时间的格式修改一下系统变量截取的那部分代码。

作者: win007     时间: 2008-11-26 09:11
经过测试 结果如下: FileDay: 2008 11 25 04 35p mFileDay FileDay2Minutes: 20460515 还是没有判定,斑竹指教

作者: HAT     时间: 2008-11-26 09:48
每一句都加pause结果就输出了39楼这么点结果? 开始,运行,cmd,yourfile.bat,有没有报错信息?

作者: win007     时间: 2008-11-26 09:57
@echo off pause set SrcFile=D:\a.txt pause for /f "skip=5 tokens=1-2 delims= " %%a in ('dir /tw "%SrcFile%"') do ( pause set "FileDay=%%a %%b" pause goto :compare pause ) :compare pause REM set "FileDay=2008/11/25 20:57" call :DateToMins %FileDay:~0,4% %FileDay:~5,2% %FileDay:~8,2% %FileDay:~11,2% %FileDay:~14,3% mFileDay pause echo FileDay: %FileDay:~0,4% %FileDay:~5,2% %FileDay:~8,2% %FileDay:~11,2% %FileDay:~14,3% mFileDay echo FileDay2Minutes: %mFileDay% REM set "mydate=星期二 2008/11/25 15:53:54.40" call :DateToMins %date:~4,4% %date:~9,2% %date:~12,2% %time:~15,2% %time:~18,2% mToday pause echo Today: %date:~4,4% %date:~9,2% %date:~12,2% %time:~15,2% %time:~18,2% mToday echo Today2Minutes: %mToday% set /a mMinus=mToday-mFileDay pause echo Minus: %mMinus% if %mMinus% gtr 5 ( echo "The system is down" pause ) else ( echo "The system is running" pause ) pause goto :eof pause ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :DateToMins %yy% %mm% %dd% %hh% %mm% result :: :: By: Ritchie Lawrence, updated 2003-04-03. Version 1.1 :: :: Func: Returns the number of elapsed minutes since 1970-01-01 00:00 :: for a given date. For NT4/2K/XP/2003 :: :: Args: %1 years to convert, 2 or 4 digit (by val) :: %2 months to convert, 1/01 to 12, leading zero ok (by val) :: %3 days to convert, 1/01 to 31, leading zero ok (by val) :: %4 hours to convert, 1/01 to 12 for 12hr times (minutes must be :: suffixed by 'a' or 'p', 0/00 to 23 for 24hr clock (by val) :: %5 mins to convert, 00-59 only, suffixed by a/p if 12hr (by val) :: %6 var to receive number of elapsed minutes (by ref) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS pause set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5 pause if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%) pause set /a dd=100%dd%%%100,mm=100%mm%%%100 pause set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2 pause set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633 pause if 1%hh% LSS 20 set hh=0%hh% pause if {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88 pause if {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00 pause if {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2% pause set /a hh=100%hh%%%100,nn=100%nn%%%100,j=j*1440+hh*60+nn pause endlocal&set %6=%j%&goto :EOF pause 结果还是: FileDay: 2008 11 25 04 35p mFileDay FileDay2Minutes: 20460515

作者: HAT     时间: 2008-11-26 10:58
set SrcFile=D:\a.txt
for /f "skip=5 tokens=1-2 delims= " %%a in ('dir /tw "%SrcFile%"') do (
  set "FileDay=%%a %%b"
  goto :compare
)
:compare
REM set "FileDay=2008/11/25 20:57"
call :DateToMins %FileDay:~0,4% %FileDay:~5,2% %FileDay:~8,2% %FileDay:~11,2% %FileDay:~14,3% mFileDay
echo FileDay: %FileDay:~0,4% %FileDay:~5,2% %FileDay:~8,2% %FileDay:~11,2% %FileDay:~14,3% mFileDay
echo FileDay2Minutes: %mFileDay%
REM set "mydate=星期二 2008/11/25 15:53:54.40"
call :DateToMins %date:~4,4% %date:~9,2% %date:~12,2% %time:~15,2% %time:~18,2% mToday
echo Today: %date:~4,4% %date:~9,2% %date:~12,2% %time:~15,2% %time:~18,2% mToday
echo Today2Minutes: %mToday%
set /a mMinus=mToday-mFileDay
echo Minus: %mMinus%
if %mMinus% gtr 5 (
  echo "The system is down"
) else (
  echo "The system is running"
)
pause
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DateToMins %yy% %mm% %dd% %hh% %mm% result
::
:: By:   Ritchie Lawrence, updated 2003-04-03. Version 1.1
::
:: Func: Returns the number of elapsed minutes since 1970-01-01 00:00
::       for a given date. For NT4/2K/XP/2003
:: 
:: Args: %1 years to convert, 2 or 4 digit (by val)
::       %2 months to convert, 1/01 to 12, leading zero ok (by val)
::       %3 days to convert, 1/01 to 31, leading zero ok (by val)
::       %4 hours to convert, 1/01 to 12 for 12hr times (minutes must be
::          suffixed by 'a' or 'p', 0/00 to 23 for 24hr clock (by val)
::       %5 mins to convert, 00-59 only, suffixed by a/p if 12hr (by val)
::       %6 var to receive number of elapsed minutes (by ref)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
if 1%hh% LSS 20 set hh=0%hh%
if {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
if {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00
if {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2%
set /a hh=100%hh%%%100,nn=100%nn%%%100,j=j*1440+hh*60+nn
endlocal&set %6=%j%&goto :EOF
把完整结果贴出来看看

作者: win007     时间: 2008-11-26 11:05
结果如下: d:\Documents and Settings\cy_pjhuang\桌面>set SrcFile=D:\a.txt d:\Documents and Settings\cy_pjhuang\桌面>for /F "skip=5 tokens=1-2 delims= " %a in ('dir /tw "D:\a.txt"') do ( set "FileDay=%a %b" goto :compare ) d:\Documents and Settings\cy_pjhuang\桌面>( set "FileDay=2008/11/25 04:35p" goto :compare ) d:\Documents and Settings\cy_pjhuang\桌面>REM set "FileDay=2008/11/25 20:57" d:\Documents and Settings\cy_pjhuang\桌面>call :DateToMins 2008 11 25 04 35p mFileDay d:\Documents and Settings\cy_pjhuang\桌面>setlocal ENABLEEXTENSIONS d:\Documents and Settings\cy_pjhuang\桌面>set yy=2008 & set mm=11 & set dd=25 & set hh=04 & set nn=35p d:\Documents and Settings\cy_pjhuang\桌面>if 12008 LSS 200 if 12008 LSS 170 (set yy=202008 ) else (set yy=192008 ) d:\Documents and Settings\cy_pjhuang\桌面>set /a dd=10025%100,mm=10011%100 d:\Documents and Settings\cy_pjhuang\桌面>set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2 d:\Documents and Settings\cy_pjhuang\桌面>set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633 d:\Documents and Settings\cy_pjhuang\桌面>if 104 LSS 20 set hh=004 d:\Documents and Settings\cy_pjhuang\桌面>if {p} EQU {p} if "04" NEQ "12" set hh=104 & set/a hh-=88 d:\Documents and Settings\cy_pjhuang\桌面>if {p} EQU {a} if "16" EQU "12" set hh=00 d:\Documents and Settings\cy_pjhuang\桌面>if {p} GEQ {a} set nn=35 d:\Documents and Settings\cy_pjhuang\桌面>set /a hh=10016%100,nn=10035%100,j=j*1440+hh*60+nn d:\Documents and Settings\cy_pjhuang\桌面>endlocal & set mFileDay=20460515 & goto :EOF d:\Documents and Settings\cy_pjhuang\桌面>echo FileDay: 2008 11 25 04 35p mFileDay FileDay: 2008 11 25 04 35p mFileDay d:\Documents and Settings\cy_pjhuang\桌面>echo FileDay2Minutes: 20460515 FileDay2Minutes: 20460515 d:\Documents and Settings\cy_pjhuang\桌面>REM set "mydate=星期二 2008/11/25 15:53:54.40" d:\Documents and Settings\cy_pjhuang\桌面>call :DateToMins 2008 11 26 mToday d:\Documents and Settings\cy_pjhuang\桌面>setlocal ENABLEEXTENSIONS d:\Documents and Settings\cy_pjhuang\桌面>set yy=2008 & set mm=11 & set dd=26 & set hh=mToday & set nn= d:\Documents and Settings\cy_pjhuang\桌面>if 12008 LSS 200 if 12008 LSS 170 (set yy=202008 ) else (set yy=192008 ) d:\Documents and Settings\cy_pjhuang\桌面>set /a dd=10026%100,mm=10011%100 d:\Documents and Settings\cy_pjhuang\桌面>set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2 d:\Documents and Settings\cy_pjhuang\桌面>set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633 d:\Documents and Settings\cy_pjhuang\桌面>if 1mToday LSS 20 set hh=0mToday d:\Documents and Settings\cy_pjhuang\桌面>if {~2,1hhhh&set/a hh-=88

作者: HAT     时间: 2008-11-26 11:52
@echo off
set SrcFile=D:\a.txt
for /f "skip=5 tokens=1-2 delims= " %%a in ('dir /tw "%SrcFile%"') do (
  set "FileDay=%%a %%b"
  goto :compare
)
:compare
REM set "FileDay=2008/11/25 20:57"
call :DateToMins %FileDay:~0,4% %FileDay:~5,2% %FileDay:~8,2% %FileDay:~11,2% %FileDay:~14,3% mFileDay
echo FileDay: %FileDay:~0,4% %FileDay:~5,2% %FileDay:~8,2% %FileDay:~11,2% %FileDay:~14,3% mFileDay
echo FileDay2Minutes: %mFileDay%
REM set "mydate=星期二 2008/11/25 15:53:54.40"
call :DateToMins %date:~4,4% %date:~9,2% %date:~12,2% %time:~0,2% %time:~3,2% mToday
echo Today: %date:~4,4% %date:~9,2% %date:~12,2% %time:~0,2% %time:~3,2% mToday
echo Today2Minutes: %mToday%
set /a mMinus=mToday-mFileDay
echo Minus: %mMinus%
if %mMinus% gtr 5 (
  echo "The system is down"
) else (
  echo "The system is running"
)
pause
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DateToMins %yy% %mm% %dd% %hh% %mm% result
::
:: By:   Ritchie Lawrence, updated 2003-04-03. Version 1.1
::
:: Func: Returns the number of elapsed minutes since 1970-01-01 00:00
::       for a given date. For NT4/2K/XP/2003
:: 
:: Args: %1 years to convert, 2 or 4 digit (by val)
::       %2 months to convert, 1/01 to 12, leading zero ok (by val)
::       %3 days to convert, 1/01 to 31, leading zero ok (by val)
::       %4 hours to convert, 1/01 to 12 for 12hr times (minutes must be
::          suffixed by 'a' or 'p', 0/00 to 23 for 24hr clock (by val)
::       %5 mins to convert, 00-59 only, suffixed by a/p if 12hr (by val)
::       %6 var to receive number of elapsed minutes (by ref)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
if 1%hh% LSS 20 set hh=0%hh%
if {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
if {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00
if {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2%
set /a hh=100%hh%%%100,nn=100%nn%%%100,j=j*1440+hh*60+nn
endlocal&set %6=%j%&goto :EOF

作者: win007     时间: 2008-11-26 13:23
测试成功,万分感谢斑竹~

作者: win007     时间: 2008-11-26 16:49
@echo off set SrcFile=D:\a.txt for /f "skip=5 tokens=1-2 delims= " %%a in ('dir /tw "%SrcFile%"') do ( set "FileDay=%%a %%b" goto :compare ) :compare REM set "FileDay=2008/11/25 20:57" call :DateToMins %FileDay:~0,4% %FileDay:~5,2% %FileDay:~8,2% %FileDay:~11,2% %FileDay:~14,3% mFileDay echo FileDay: %FileDay:~0,4% %FileDay:~5,2% %FileDay:~8,2% %FileDay:~11,2% %FileDay:~14,3% mFileDay echo FileDay2Minutes: %mFileDay% REM set "mydate=星期二 2008/11/25 15:53:54.40" call :DateToMins %date:~4,4% %date:~9,2% %date:~12,2% %time:~0,2% %time:~3,2% mToday echo Today: %date:~4,4% %date:~9,2% %date:~12,2% %time:~0,2% %time:~3,2% mToday echo Today2Minutes: %mToday% set /a mMinus=mToday-mFileDay echo Minus: %mMinus% if %mMinus% gtr 5 ( goto :Oracle down ) else ( goto :Oracle running ) pause goto :eof ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :DateToMins %yy% %mm% %dd% %hh% %mm% result :: :: By: Ritchie Lawrence, updated 2003-04-03. Version 1.1 :: :: Func: Returns the number of elapsed minutes since 1970-01-01 00:00 :: for a given date. For NT4/2K/XP/2003 :: :: Args: %1 years to convert, 2 or 4 digit (by val) :: %2 months to convert, 1/01 to 12, leading zero ok (by val) :: %3 days to convert, 1/01 to 31, leading zero ok (by val) :: %4 hours to convert, 1/01 to 12 for 12hr times (minutes must be :: suffixed by 'a' or 'p', 0/00 to 23 for 24hr clock (by val) :: %5 mins to convert, 00-59 only, suffixed by a/p if 12hr (by val) :: %6 var to receive number of elapsed minutes (by ref) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5 if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%) set /a dd=100%dd%%%100,mm=100%mm%%%100 set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2 set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633 if 1%hh% LSS 20 set hh=0%hh% if {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88 if {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00 if {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2% set /a hh=100%hh%%%100,nn=100%nn%%%100,j=j*1440+hh*60+nn endlocal&set %6=%j%&goto :EOF :Oracle down set oraName=cim set oraPass=cim set oraDB=cim10t set oraSql=%temp%\myOra1.sql start sqlplus /nolog @"%oraSql%" >"%oraSql%" echo conn %oraName%/%oraPass%@%oraDB% >"%oraSql%" echo insert into MSG_TBL_SENDREQ t >"%oraSql%" echo values ('PROMIS Adapter','','EMAIL','CY_PJHUANG','','PROMIS Adapter has been down','','','NEW','','','','','','','','','','','','','','',''); exit :Oracle running set oraName=cim set oraPass=cim set oraDB=cim10t set oraSql=%temp%\myOra2.sql start sqlplus /nolog @"%oraSql%" >"%oraSql%" echo conn %oraName%/%oraPass%@%oraDB% >"%oraSql%" echo insert into MSG_TBL_SENDREQ t >"%oraSql%" echo values ('PROMISAdapter','','EMAIL','CY_PJHUANG','','PROMIS Adapter is running','','','NEW','','','','','','','','','','','','','','',''); exit 测试结果 SP2-0734:unknowen command beginning "er','','EM..." - rest of line ignored.

作者: win007     时间: 2008-11-26 16:51
我手动进去oracle,输入上面的SQL是成功的,不知道是哪里写错了

作者: HAT     时间: 2008-11-26 16:54
>表示覆盖写入 >>才是追加写入 应该先生成.sql文件,后start [ Last edited by HAT on 2008-11-26 at 16:56 ]

作者: win007     时间: 2008-11-26 20:45
测试成功

作者: win007     时间: 2008-12-25 10:12
“[请教]检测系统log存活以及有无关键字” 请参考此帖,这就是上次用文件修改的时间之差来判断系统有无存活