目录
1、获取系统版本
2、判断服务状态
3、延时
4、计时器
5、获取启动时间
1、GetOS
函数 GetOS 返回操作系统的版本。
| ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :GetOS os :: :: 作者:Ritchie Lawrence, 2003-09-18. 版本 1.0 :: :: 功能:获取操作系统版本。 :: 适用于 NT4/2000/XP/2003. :: :: 参数:%1 该变量用于接收操作系统版本(引用调用) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS & set "cmd=net config work^|findstr/b /c:"软件版本"" for /f "tokens=1-2 delims=." %%a in ('%cmd%') do ( for %%z in (%%a%%b) do set o=%%z) endlocal & set "%1=%o:40=NT40%" & (goto :EOF) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |
参数
%1 该变量用于接收操作系统版本(引用调用)
返回值
Value | Operating System |
NT40 | Microsoft Windows NT 4.0 |
2000 | Microsoft Windows 2000 |
2002 | Microsoft Windows XP |
2003 | Microsoft Windows 2003 |
实例
@echo off & setlocal ENABLEEXTENSIONS
call :GetOS ver
echo/操作系统版本是:%ver%
goto :EOF
备注
该函数依赖于命令行解释器的版本。
参考
2、IsRunning
函数 IsRunning 判断指定的服务是否正在运行。
| ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :IsRunning %svc% :: :: 作者:Ritchie Lawrence, 2003-10-08. 版本 1.0 :: :: 功能:如果指定的服务正在运行,errorlevel 被设置为 0,否则被设置为 1。 :: 适用于 NT4/2000/XP/2003. :: :: 参数:%1 待检测服务的显示名称(传值调用) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS & set "svc=%1" set svc=%svc:"=% net start | findstr/i /b /e /c:" %svc%" >nul endlocal & goto :EOF ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |
参数
%1 待检测服务的显示名称(传值调用)
返回值
见上述参数。
实例
@echo off & setlocal ENABLEEXTENSIONS
call :IsRunning "Task Scheduler" && echo/正在运行 || echo/不在运行
goto :EOF
备注
注,使用 Findstr 命令的 /b 和 /e 是为了尽可能地避免出错。如果当“Server”服务正在运行而且其它服务里面也包含字符“server”的时候,不使用这两个开关的话可能出错。另外要注意," %svc%"双引号里面有三个空格。
谨记,处于暂停状态的服务会被 net 命令认为是正在运行的。如果一定要知道服务是正在运行并且没有被暂停,Windows NT4 和 2000 下需要使用第三方工具,Windows XP 和 2003 使用自带的工具 SC.exe。
参考
无。
3、Sleep
函数 Sleep 在当前批处理文件中延时指定时间。
| ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :Sleep %secs% :: :: 作者:Ritchie Lawrence, 2003-09-16. 版本 1.0 :: :: 功能:在批处理文件中延时指定秒数。 :: 适用于 NT4/2000/XP/2003. :: :: 参数:%1 延时的秒数(传值调用) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS & set /a n=%1+1 ping -n %n% 127.0.0.1 >nul endlocal & goto :EOF ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |
参数
%1 延时的秒数(传值调用)
返回值
见上述参数。
实例
@echo off
call :Sleep 5
goto :EOF
备注
该函数基于 Clay Calvert 的思路。
参考
Timer
4、Timer
函数 Timer 返回从第一次调用该函数到最后一次调用该函数所经过的秒数。
| ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :Timer ID :: :: 作者:Ritchie Lawrence, 2002-10-10. 版本 1.1 :: 更新 2007-10-31 - 感谢 Fabricio 和 Darren :: :: 功能:返回从第一次调用该函数到最后一次调用该函数所经过的秒数。 :: 适用于 NT4/2000/XP/2003. :: :: 参数:%1 (引用调用)第一次调用该函数的时候,该变量被初始化为“<last> :: <first> <init>”,<last> 和 <first> 是 0,<init> 是自从 :: 1970-01-01 00:00:00 以来所经过的秒数。该值被用于随后的调用,以判断 :: 从第一次调用(<first>)该函数到最后一次调用(<last>)该函数 :: 所经过的秒数。 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS&call set ID=%%%1%% set t=2&if "%date%z" LSS "A" set t=1 for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('echo/^|date') do ( for /f "tokens=%t%-4 delims=.-/ " %%d in ('date/t') do ( set %%a=%%d&set %%b=%%e&set %%c=%%f)) for /f "tokens=5-7 delims=:. " %%a in ('echo/^|time') do ( set hh=%%a&set nn=%%b&set ss=%%c) 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 set /a hh=100%hh%%%100,nn=100%nn%%%100,ss=100%ss%%%100 set /a j=j*86400+hh*3600+nn*60+ss for /f "tokens=1-3 delims= " %%a in ('echo/%ID%') do ( set l=%%a&set f=%%b&set c=%%c) if {%c%}=={} endlocal&set %1=0 0 %j%&goto :EOF set /a l=j-c-f,f+=l endlocal&set %1=%l% %f% %c%&goto :EOF ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |
参数
%1 (引用调用)第一次调用该函数的时候,该变量被初始化为“<last> <first> <init>”,<last> 和 <first> 是 0,<init> 是自从 1970-01-01 00:00:00 以来所经过的秒数。该值被用于随后的调用,以判断从第一次调用(<first>)该函数到最后一次调用(<last>)该函数所经过的秒数。
返回值
见上述参数。
实例
@echo off & setlocal
set var=
call :Timer var
call :show
::wait about 3 seconds
ping 127.0.0.1 -n 4 >nul
call :Timer var
call :show
::wait about 7 seconds
ping 127.0.0.1 -n 8 >nul
call :Timer var
call :show
goto :EOF
:show
for /f "tokens=1-2 delims= " %%a in ('echo/%var%') do (
echo/从最后一次调用经过了 %%a 秒,从第一次调用经过了 %%b秒
)
goto :EOF
备注
第一次调用该函数,应传递一个未定义的变量。
多个计时器可以并发使用,只需为每个实例使用不同的变量名即可。更多信息见函数头。
更新:修正倒数第二行中的错误(原来是:set /a l=j-c-l,f+=l) - 感谢 Fabricio 和 Darren 看出了这个错误。
参考
Sleep
5、Uptime
函数 Uptime 返回自从上次系统启动经历的天数、小时数、分钟数、秒钟数。
| ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :Uptime days hours mins [secs] :: :: 作者:Ritchie Lawrence, 2003-09-24. 版本 1.0 :: :: 功能:获取自从上次系统启动经历的天数、小时数、分钟数、秒钟数。 :: 适用于 NT4/2000/XP/2003. :: :: 参数:%1 该变量用于接收启动的天数(引用调用) :: %2 该变量用于接收启动的小时数(引用调用) :: %3 该变量用于接收启动的分钟数(引用调用) :: %4 该变量用于接收启动的秒钟数(引用调用) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS & set "c=net statistics work" set t=2&if "%date%z" LSS "A" set t=1 for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('echo/^|date') do ( for /f "tokens=%t%-4 delims=.-/ " %%d in ('date/t') do ( set %%a=%%d&set %%b=%%e&set %%c=%%f)) for /f "tokens=5-8 delims=:. " %%a in ('echo/^|time') do ( set "hh=%%a" & set "nn=%%b" & set "ss=%%c") 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% set /a hh=100%hh%%%100,nn=100%nn%%%100,f=j*1440+hh*60+nn for /f "tokens=3-8 delims=/:M " %%a in ('%c%^|findstr/b /c:"Stat"') do ( set mm=%%a&set dd=%%b&set yy=%%c&set hh=%%d&set nn=%%e%%f) 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,s=j*1440+hh*60+nn,n=f-s set /a d=n/1440,n%%=1440,h=n/60,n%%=60 endlocal & set "%1=%d%" & set "%2=%h%" & set "%3=%n%" ^ & (if "%4" NEQ "" set "%4=%ss%") & goto :EOF ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |
参数
%1 该变量用于接收启动的天数(引用调用)
%2 该变量用于接收启动的小时数(引用调用)
%3 该变量用于接收启动的分钟数(引用调用)
%4 该变量用于接收启动的秒钟数(引用调用)
返回值
见上述参数。
实例
@echo off & setlocal ENABLEEXTENSIONS
call :Uptime d h n s
echo/系统运行了:%d% 天,%h% 小时,%n% 分,%s% 秒。
goto :EOF
备注
该函数获取的启动时间通常会比第三方程序(比如 Resource Kit 中的 SrvInfo 还有 sysinternals 中的 PsInfo)获取的启动时间少 30 秒左右。
参考
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。