bat

一、dos下计算两个%time%时间差

1、场景一(此脚本基本调试通过)

bat语句中计算两个时间差,可以先将时间转换成秒数,然后,将两个时间数进行相减即可,参考代码(此代码中问题多多):
@echo off
set ns=0
rem 显示开始时间
set time1=%time%
echo 当前时间是%time1%
call :time2sec %time1%
set t1=%ns%
pause

rem 显示结束时间
set time2=%time%
echo 当前时间是%time2%
call :time2sec %time2%
set t2=%ns%
rem 计算时间差,计算中,最好把表达式用引号括起来
set /a "tdiff=(%t2%-%t1%)"
echo diff %time1% from %time2% is %tdiff% seconds.
pause
goto :eof

:time2sec
rem 将时间转换成秒数,保存到ns中
rem %t1 是函数的第一个入参
set tt=%1
rem 从第一(0)个字符开始,取两个长度
rem 这个用法其实有问题,当小时不是两位数的时候,取值发生错位
set hh=%tt:~0,2%
set mm=%tt:~3,2%
set ss=%tt:~6,2%
rem 表达式需要用引号,否则问题报错,
rem 说括号不配对,花了很长时间才解决
set /a "ns=(%hh%*60+%mm%)*60+%ss%"
goto :eof

2、场景二(脚本尚未调试)

@echo off
title 同一月份下的耗时计算
::获取起始月份、起始日期、起始小时和起始分钟
set startmonth=%date:~5,2%
set startday=%date:~8,2%
set starthour=%time:~0,2%
set startmin=%time:~3,2%

echo.&echo 修改系统日期和时间为未来同一个月份下的某日某月某时某分 以便测试脚本
echo 完成修改后 按任意键继续
pause >nul
::获取终止月份、终止日期、终止小时和终止分钟
set endmonth=%date:~5,2%
set endday=%date:~8,2%
set endhour=%time:~0,2%
set endmin=%time:~3,2%  
::初始化间隔日期变量、间隔小时变量和间隔分钟变量
set intday=0
set inthour=0
set intmin=0
::初始化耗时变量
set inttime=0 
::如果结束月份和起始月份不在同一月 则调用calc4标签
if %endmonth% NEQ %startmonth% (call:calc4 & goto :finalresult)
::如果结束日期等于起始日期 则调用calc1标签
if %endday% EQU %startday% (call:calc1 & goto :finalresult)
::如果结束日期大于起始日期 则调用calc2标签
if %endday% GTR %startday% (call:calc2 & goto :finalresult)
::如果结束日期小于起始日期 则调用calc3标签
if %endday% LSS %startday% (call:calc3 & goto :finalresult)
::备注:没有规避同一天内结束小时小于起始小时、以及同一小时内结束分钟小于起始分钟的情况,因为在脚本运行过程中,逻辑上一般不会出现这两种情况。
::显示耗时
:finalresult
echo 耗时:%inttime%
exit /b
::同一天内的耗时计算 需考虑到结束分钟小于起始分钟的时候 从终止小时借位的情况
:calc1
if /i %endmin% LSS %startmin% (set /a intmin=endmin+60-startmin & set /a endhour-=1) else (set /a intmin=endmin-startmin)
set /a inthour=endhour-starthour
set /a intday=endday-startday
set inttime=%intday%天%inthour%小时%intmin%分钟
goto :eof
::同一月份但不同天内的耗时计算 需考虑到结束分钟小于起始分钟的时候 从终止小时借位的情况 需考虑到结束小时小于起始小时的时候 从终止日期借位的情况
:calc2
if /i %endmin% LSS %startmin% (set /a intmin=endmin+60-startmin & set /a endhour-=1) else (set /a intmin=endmin-startmin)
if /i %endhour% LSS %starthour% (set /a inthour=endhour+24-starthour & set /a endday-=1) else (set /a inthour=endhour-starthour)
set /a intday=endday-startday
set inttime=%intday%天%inthour%小时%intmin%分钟
goto :eof
::同一月份下 结束日期逻辑上不能小于起始日期 抛出错误
:calc3
set inttime=错误!结束日期小于起始日期!
goto :eof
::跨月份的情况忽略不计
:calc4
set inttime=跨月份忽略耗时计算
goto :eof

二、延时指定时间,任意时长都可以设置

@echo of
echo this window will disappear 3 seconds later
‘自动生成一个VB脚本,参数0表示第一个参数
'应该是特殊字符的转意字符
‘1000毫秒是一秒
echo if wscript.argument(0)^>0 then \
    wscript.Sleep(wscript.argument(0)*1000):end if>"%Temp%\delay01.vbs"
'执行脚本
cscript "%Temp\delay01.vbs" 3
‘执行结束后,删除脚本
del "%Temp\delay01.vbs"

三、找到并多杀死进程

1、找到进程

tasklist | findstr /i frps.exe

2、杀死进程

taskkill /f /im frps.exe

四、win7 快速进入开机设置目录

win+R 然后输入: shell:startup

五、想在DOS命令行下,查看内存情况

c:> systeminfo
然后,会看到各种详细信息

c:> systeminfo | findstr 内存

六、在当前窗口设置环境变量

具体配置:
【jdk1.6,jdk1.7,jdk1.8安装共存问题_xiongyouqiang的博客-CSDN博客】https://blog.csdn.net/xiongyouqiang/article/details/79353444

如在win7中安装多个 java 版本,每次启动时指定某个版本:
c:> set JAVA_HOME="d:\program files\java\jdk1.6.0_45"
c:> set path=%JAVA_HOME%\bin;%path%
c:> echo %path%

发表评论