中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] [3] [4] »
作者:
标题: [已结]检测系统存活的程式 上一主题 | 下一主题
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 16 楼』:  Re 15楼

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



2008-11-23 14:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
win007
初级用户





积分 45
发帖 44
注册 2008-11-22
状态 离线
『第 17 楼』:  

@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 ]

2008-11-24 17:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 18 楼』:  Re 17楼

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



2008-11-24 17:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
win007
初级用户





积分 45
发帖 44
注册 2008-11-22
状态 离线
『第 19 楼』:  

操作系统是 windows2000
运行cmd  -->wmic
结果如下
wmic' 不是内部命令和外部命令,也不是可以运行的程序
或批处理文件。

2008-11-24 17:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 20 楼』:  Re 19楼

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



2008-11-24 18:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
win007
初级用户





积分 45
发帖 44
注册 2008-11-22
状态 离线
『第 21 楼』:  

斑竹能不能给个sample啊
因为学了没有几天,我对bat中变量还不会运用,确实比较急。

[ Last edited by win007 on 2008-11-24 at 20:40 ]

2008-11-24 20:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 22 楼』:  

分别运行下面两条命令,把结果贴出来看看:
echo %date% %time%
dir /tw



2008-11-24 20:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
win007
初级用户





积分 45
发帖 44
注册 2008-11-22
状态 离线
『第 23 楼』:  

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 可用字节

2008-11-25 09:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 24 楼』:  

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



2008-11-25 10:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
win007
初级用户





积分 45
发帖 44
注册 2008-11-22
状态 离线
『第 25 楼』:  

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

2008-11-25 10:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 26 楼』:  

本帖中我提供的方法在理论上来说都是错误的,都可能发生误判,建议不要使用。
@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




2008-11-25 11:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
win007
初级用户





积分 45
发帖 44
注册 2008-11-22
状态 离线
『第 27 楼』:  

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

2008-11-25 11:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 28 楼』:  

使用了 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




2008-11-25 15:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
win007
初级用户





积分 45
发帖 44
注册 2008-11-22
状态 离线
『第 29 楼』:  

刚刚测试过

结果如下:
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"
请按任意键继续 . . .

2008-11-25 16:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 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




2008-11-25 17:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: