我有一个批处理脚本,但无论出于何种原因,一旦在我的foor循环中设置了一个值,它就会持续存在并且不会更新。我的值:我的for循环中的'totalTime'和'totalHours'总是与第一次调用converttime时的值相同。我已经验证我的'converttime'函数准确地获得了正确的值,但我不确定如何在for循环中更改值。
我的代码如下所示:
@echo off
set duration=01:25:45
call :converttime %duration%
set /A duration=%totalHours%+%totalMins%
FOR /F "tokens=2 delims=#" %%i IN (subtitle.txt) DO (
call :converttime %%i
set /A totalTime=%totalMins%+%totalhours%
echo %totalTime%
)
endlocal
goto :eof
:converttime
set mytime=%1
set hour=%mytime:~0,2%
set minute=%mytime:~3,2%
set seconds=%mytime:~6,7%
if NOT "%minute%"=="" (
SET /A totalMins=%minute%*60000
)
if NOT "%hour%"=="~0,2" (
set /A totalhours=%hour%*3600000
)
输出结果为:
4500000 450 450 450 450 4500000
什么时候应该是这样的:
2500000 3520000 1450000
任何想法?
答案 0 :(得分:0)
我明白了。我只需要使用'setLocal'命令。用我的变量包围!而不是%
我完成的代码如下所示:
@echo off
set duration=01:25:45
call :converttime %duration%
set /A duration=%totalHours%+%totalMins%
setlocal ENABLEDELAYEDEXPANSION
FOR /F "tokens=2 delims=#" %%i IN (subtitle.txt) DO (
call :converttime %%i
set /A totalTime=!totalMins!+!totalhours!
echo !totalTime!
)
ENDLOCAL
goto :eof
:converttime
set mytime=%1
set hour=%mytime:~0,2%
set minute=%mytime:~3,2%
set seconds=%mytime:~6,7%
if NOT "%minute%"=="" (
SET /A totalMins=%minute%*60000
)
if NOT "%hour%"=="~0,2" (
set /A totalhours=%hour%*3600000
)