閱讀SET幫助(從命令提示符HELP SET
型)制定時間,你會看到,SET總是解釋零前綴數字爲八進制。沒有設置會強制使用base 10.相反,您必須操作字符串,使其不以零開頭。
沒有必要寫入臨時文件。您可以使用FOR/F分析輸出,也可以將輸出分爲小時,分鐘和秒鐘標記。
我知道的2層簡單的方法來繞過主導0
的一種方法是用1前綴的值,然後使用MOD(餘數)操作,以提取所需的數字。在你的情況下,小時數將被限制爲最大值99.如果你需要支持多達999,那麼你可以以10爲前綴並且使用1000的mod。注意,可以使用單個SET /使用,
分隔每個分配的聲明。 SET/A服從正確的優先順序,所以不需要括號。
@echo off
for /f "tokens=2-4 delims=:. " %%A in ('ffmpeg -i test.ts 2^>^&1 ^| find "Duration"') do (
set /a Hours=1%%A%%100, Mins=1%%B%%100, Secs=1%%C%%100, Duration_In_Seconds=Hours*3600+Mins*60+Secs
)
另一種方法是使用FOR/F循環去掉前導零。我追加一個1,然後除以10,以便只處理一串零。
@echo off
for /f "tokens=2-4 delims=:. " %%A in ('ffmpeg -i test.ts 2^>^&1 ^| find "Duration"') do (
for /f "delims=0" %%N in ("%%A1") do set /a Hours=%%N/10
for /f "delims=0" %%N in ("%%B1") do set /a Mins=%%N/10
for /f "delims=0" %%N in ("%%C1") do set /a Secs=%%N/10
set /a Duration_In_Seconds=Hours*3600+Mins*60+Secs
)
如果你願意,如果小數秒大於或等於0.5,則很容易將代碼擴展到秒。只需添加,
作爲分隔符來解析額外的標記,然後添加一些數學技巧來進行舍入。
@echo off
for /f "tokens=2-5 delims=:., " %%A in ('ffmpeg -i test.ts 2^>^&1 ^| find "Duration"') do (
for /f "delims=0" %%N in ("%%A1") do set /a Hours=%%N/10
for /f "delims=0" %%N in ("%%B1") do set /a Mins=%%N/10
for /f "delims=0" %%N in ("%%C%%D1") do set /a Secs=(%%N+500)/1000
set /a Duration_In_Seconds=Hours*3600+Mins*60+Secs
)
謝謝dbhenman。我似乎要求的每一個問題都可以通過for命令來解決:D – Kiwijunglist
set/a小時= 1%持續時間:〜12,2%然後使用(小時-100)幾小時也可以工作:D – Kiwijunglist
您的代碼在2 >&1在這個時候是意外的。 – Kiwijunglist