0

我有一个批处理脚本,但无论出于何种原因,一旦在我的 foo 循环中设置了一个值,它就会持续存在并且不会更新。我的值:我的 for 循环中的“totalTime”和“totalHours”始终与第一次调用“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 4500000 4500000 4500000 4500000 4500000

什么时候应该是这样的:

2500000 3520000 1450000

有任何想法吗??

4

1 回答 1

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    
)
于 2012-08-20T17:18:17.753 回答