如何在CMD中将一个变量赋值为另外两个变量之和?附运算报错案例
问题根因
- 批处理
set /a命令默认将以0开头的数值识别为八进制数,而8、9不属于八进制合法字符,你的_mm值为008,会被判定为无效八进制直接按0处理,0+1自然得到结果1。 set /a计算逻辑默认不会保留前导零,就算用合法数值计算,输出也是无格式的纯数字,无法直接得到两位带前导零的结果。
修复方案
先将带前导零的月份值转成十进制数值计算,计算完成后再手动补前导零即可,修复后代码如下:
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO ( IF "%%~L"== "" goto s_done Set _yyyy=%%L rem 去除前导零,转成十进制数值避免八进制解析错误 Set /a _mm=100%%J %% 100 Set /a _nextmm=_mm+1 rem 补两位前导零,取最后两位保证格式统一 Set _nextmm=00%_nextmm% Set _nextmm=%_nextmm:~-2% rem 若需要处理12月加1跳转1月的场景,可加以下判断 rem if %_nextmm% equ 13 set _nextmm=01 ) :s_done
修复后调用echo %_nextmm%即可得到预期的009结果。
内容的提问来源于stack exchange,提问作者Trung Phạm
相关产品推荐
相关产品推荐

