标题: [已结]检测系统存活的程式
[打印本页]
作者: 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
Quote: |
set SrcPath=%SrcFile:\=\\%
这行需要改吗 |
|
不需要改
Quote: |
>"%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存活以及有无关键字”
请参考此帖,这就是上次用文件修改的时间之差来判断系统有无存活