目录
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 秒左右。
参考
|