首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令选项tokens=07的DOS工作,但不工作tokens=08

命令选项tokens=07的DOS工作,但不工作tokens=08
EN

Stack Overflow用户
提问于 2012-08-03 19:24:01
回答 1查看 921关注 0票数 0

我在美国英语地区使用Windows2008Windows R2。我的批处理文件在8月1日之后停止了工作。从三月到七月,天气一直很好。

该脚本将一个数字月份转换为带前导为零的字符串。这是要复制的脚本。实际批处理脚本从%date%提取数字月份。

代码语言:javascript
复制
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,则错误消息失败。

代码语言:javascript
复制
8" was unexpected at this time

所以我去掉了前导零点。

代码语言:javascript
复制
set /A month=100%month% %% 100

现在它又恢复正常了,下面是我的问题

  1. 用于Windows2008的R2命令的官方文档在哪里?

编辑:http://technet.microsoft.com/en-us/library/cc754900.aspx

  1. 将零填充号传递给令牌选项可能是我的错,但是为什么07是可以接受的,而不是08呢?
  2. 如果07是有效的参数,它是相同的7还是解释为其他东西?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-03 21:22:51

根据对问题的评论,您似乎已经意识到Windows试图将08视为八进制,这当然是失败的。

每当CMD.EXE内部命令需要解析一个数字时,它都会将任何以0为前缀的数字字符串视为八进制,而以0x为前缀的任何数字字符串则视为十六进制。这些数字也可以用符号作为前缀。这些数字仅限于可以表示为有符号的4字节整数:-2147483648到2147483647的值。

我知道微软文档中提到十六进制和八进制数字支持的唯一地方是使用SET命令的/A选项。但是,所有作为数字处理的字符串似乎都是以相同的方式处理的。

这包括:

1)设置/A

代码语言:javascript
复制
set /a 010+0xA
18

2)用于/F令牌和跳过选项()

代码语言:javascript
复制
for /f "tokens=010" %A in ("1 2 3 4 5 6 7 8 9 10") do @echo %A
8

3)用于/L

代码语言:javascript
复制
for /l %N in (010 1 0xA) do @echo %N
8
9
10

3)如果数值比较

代码语言:javascript
复制
if 012==0xA echo match
match

4)使用子字符串操作(带负数的示例)展开变量

代码语言:javascript
复制
set "test=0123456789ABCDEF"
echo %test:~-0xA,-010%
67

这是我目前所能想到的,但可能还有其他人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11802041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档