Windows命令解释器使用的C/C++函数strtol与第三功能参数base
值0
。这意味着任何以0开头的数字字符串被解释为八进制数字。 08
和09
不是有效的八进制数为八进制系统仅具有数字0到7
的溶液并不使用算术表达式,而是只使用字符串替换:
@echo off
setlocal EnableExtensions
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "MyDate=%%I"
set "Year=%MyDate:~0,4%"
if "%MyDate:~4,1%" == "0" (set "Month=%MyDate:~5,1%") else set "Month=%MyDate:~4,2%"
if "%MyDate:~6,1%" == "0" (set "Day=%MyDate:~7,1%") else set "Day=%MyDate:~6,2%"
echo Year: %Year%
echo Month: %Month%
echo Day: %Day%
endlocal
这批代码输出:
Year: 2017
Month: 8
Day: 24
使用WMIC命令的UTF-16小字节序编码的输出是:
LocalDateTime=20170824150309.315000+120
只有20170824150309
被分配到环境中,因为tokens=2 delims==.
这是由后只使用字符串替换,未来3个通过命令行命令行,而不是算术表达式在这里是没有帮助去除前导零进一步处理的变量MyDate
。
为了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
echo /?
for /?
if /?
set /?
wmic /?
wmic os /?
wmic os get /?
wmic os get localdatetime /?
现在,我得到,当SET /一个MM =%MyDate时:〜4,2%的结果是08那个时候才得到这个错误。 –
但我想要数字格式,如果结果是05我只需要5.如果我的结果是11或10或12那时我需要11或10或12分别。 –