执行加法时批量失败“数字常数是十进制,十六进制或八进制”,为什么会发生这种情况/如何解决?

执行加法时批量失败“数字常数是十进制,十六进制或八进制”,为什么会发生这种情况/如何解决?
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set month=%dt:~4,2%
set day=%dt:~6,2%
set /a rday=%day%+470
set /a rmonth+%month%+590
echo %rmonth%
echo %rday%
pause

我想要做的是找到日期和月份,然后将数字添加到它们的值中。对于月份,我添加 590,对于日期,我添加 470。

它对于日而言工作正常,但是对于月而言却不工作,并且我收到错误“无效数字。数字常数要么是十进制(17),十六进制(0x11),要么是八进制(021)。”

我绝不是一名程序员,也不精通批处理。我在网上找到了提取日期和月份的代码,我自己做的只有最后一部分,而且它似乎不能正常工作。我想一定有一个简单的修复方法。

答案1

它的意思是0107由于前导而被解释为八进制数0。现在是九月,09不是有效的八进制数。

解决方法可能是

set /a rmonth+1%month%+490

但这看起来像是一个丑陋的黑客。我很乐意为另一个有正确解决方案的答案点赞。

答案2

我在从日期字符串中提取日期和月份时遇到了这个问题。在 1..9 范围内
添加前导零%VALUE%会导致错误。

我的解决方案是这样的:

rem -- demo starts with a digit less than 10 but more than octal 7
set VALUE=9
rem -- add value to 100
set /a NEWVALUE=%VALUE%+100
rem -- no calculation but string manipulation : strip all but last two digits
set VALUE=%NEWVALUE:~-2%
rem -- digital environments too should be kept clean ;)
set NEWVALUE=

答案3

申请% 模量操作员如下:

for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set month=%dt:~4,2%
set day=%dt:~6,2%
set /a rday=1%day%%%100+470
rem         ↑     ↑↑
set /a rmonth=1%month%%%100+590
rem           ↑       ↑↑
echo %rmonth%
echo %rday%
pause

请注意,在批处理脚本中需要双写%百分号(请阅读转义百分号):

%字符对于命令行参数和参数具有特殊含义FOR。要将百分号视为常规字符,请将其加倍:

%%

相关内容