早教吧 育儿知识 作业答案 考试题库 百科 知识分享

bat变量的嵌套使用,怎么用@echooffcall:dsum1209ss::时间差:dsumif%%1:0,1%==0if%%2:0,1%set/a%3=%%2:1,1%-%%1:1,1%if%%1:0,1%==0ifnot%%2:0,1%set/a%3=%2-%%1:1,1%ifnot%%1:0,1%==0if%%2:0,1%set/a%3=%%2:1,1%-%1ifnot%%1:0,1%

题目详情
bat变量的嵌套使用,怎么用
@echo off
call:dsum 12 09 ss
::时间差
:dsum
if %%1:0,1%==0 if %%2:0,1% set /a %3=%%2:1,1%-%%1:1,1%
if %%1:0,1%==0 if not %%2:0,1% set /a %3=%2-%%1:1,1%
if not %%1:0,1%==0 if %%2:0,1% set /a %3=%%2:1,1%-%1
if not %%1:0,1%==0 if not %%2:0,1% set /a %3=%2-%1
echo %ss%
goto:eof
pause
如上,我是想计算时间差来着,在网上找了好几个计算时间差的代码,都用不了.打算自己写,思路是把时间分成时分秒,做差,但由于类似set /a s=09-07这样的二进制在bat中是错误的,所以写上边的复杂代码,好分辨是否是两位数,以便于做差.变量的嵌套使用不会.如上,我想实现的是将参数12 09 ss传到子程序.但失败了.请高手指教.
或者能求出任意两点时间差的批处理,最好参数1是时间1,参数2是时间2,参数三是时间差 也可以.
▼优质解答
答案和解析
我不直接回答你这问题,有个技巧可以较简捷去前置零,比如把当前时间化成秒
set/a "t=(%time:~,2%)*3600+(1%time:~3,2%-100)*60+1%time:~6,2%-100"
对于嵌套,有两形式,一是在 setlocal enabledelayedexpansion 状态(即之前加了这句代码)
用类似:
set U=abcd
set V=2
set var=!U:~%V%,1!
则变量var的值是c
另一种是不必加那一长串状态(加了也可以用这种形式),则上例最后一句改成
call set var=%%U:~%v%,1%%