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
它的意思是01
或07
由于前导而被解释为八进制数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
。要将百分号视为常规字符,请将其加倍:%%