我在美国英语地区使用Windows2008Windows R2。我的批处理文件在8月1日之后停止了工作。从三月到七月,天气一直很好。
该脚本将一个数字月份转换为带前导为零的字符串。这是要复制的脚本。实际批处理脚本从%date%提取数字月份。
set month=07
REM convert numerical month to string
for /f "tokens=%month%" %%A in (
"jan feb mar apr may jun jul aug sep oct nov dec") do (
set month_str=%%A
)
echo %month_str%上面跑得很好。它显示了“七月”
但是,如果我将月份更改为08,则错误消息失败。
8" was unexpected at this time所以我去掉了前导零点。
set /A month=100%month% %% 100现在它又恢复正常了,下面是我的问题
编辑:http://technet.microsoft.com/en-us/library/cc754900.aspx
发布于 2012-08-03 21:22:51
根据对问题的评论,您似乎已经意识到Windows试图将08视为八进制,这当然是失败的。
每当CMD.EXE内部命令需要解析一个数字时,它都会将任何以0为前缀的数字字符串视为八进制,而以0x为前缀的任何数字字符串则视为十六进制。这些数字也可以用符号作为前缀。这些数字仅限于可以表示为有符号的4字节整数:-2147483648到2147483647的值。
我知道微软文档中提到十六进制和八进制数字支持的唯一地方是使用SET命令的/A选项。但是,所有作为数字处理的字符串似乎都是以相同的方式处理的。
这包括:
1)设置/A
set /a 010+0xA
182)用于/F令牌和跳过选项()
for /f "tokens=010" %A in ("1 2 3 4 5 6 7 8 9 10") do @echo %A
83)用于/L
for /l %N in (010 1 0xA) do @echo %N
8
9
103)如果数值比较
if 012==0xA echo match
match4)使用子字符串操作(带负数的示例)展开变量
set "test=0123456789ABCDEF"
echo %test:~-0xA,-010%
67这是我目前所能想到的,但可能还有其他人。
https://stackoverflow.com/questions/11802041
复制相似问题