本帖最后由 aloha20200628 于 2024-3-5 18:20 编辑
回复 8# hnfeng
一楼的代码除了明显的几个错误如 ENABLEEXTENSIONS,$1,...已被指出外,真正致命的是如下两个错误》
一。在用括号包裹的if语块内,set/a 句式若含括号,须用双引号包裹,例如 set/a "v=5-(100/2)";
二。局部变量续命给全局变量的句式 endlocal & set %2=!v! 字面量应为 endlocal & set %2=%v% 但更关键的是该句式不能在复合语块(如if或for)内使用(建议用法见订正代码)
如下代码是订正后的示例代码(主要针对子过程部分),已测试通过- @echo off
- call :Sec2Time 13668 hhmmss
- echo 13668 %hhmmss%
- exit /b
-
- :Sec2Time
- setlocal enabledelayedexpansion
- set hh=0
- set mm=0
- set ss=0
- if %1 LSS 60 (
- set v=!hh!:!mm!:%1
- ) else (
- if %1 LSS 3600 (
- set /a mm=%1/60
- set /a ss=%1-!mm!*60
- set v=!hh!:!mm!:!ss!
- ) else (
- set /a hh = %1 / 3600
- REM 关键点之一如下
- set /a "mm=(%1-!hh!*3600)/60"
- set /a ss=%1-!hh!*3600-!mm!*60
- set v=!hh!:!mm!:!ss!
- )
- )
- REM 关键点之二如下
- endlocal & set %2=%v%
- exit/b
复制代码
|