0

私はバッチ スクリプトを持っていますが、なんらかの理由で foror ループに値が設定されると、その値は保持され、更新されません。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 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 に答える