[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
0123 被看作是一个八进制数, 十进制就是 83 (1*8^2+2*8+3)

请查看如下地址的资料:
mkMSITStore:%windir%\Help\ntcmds.chm::/set.htm

Using /a
...
Numeric values are decimal numbers unless prefixed by 0× for hexadecimal numbers or 0 for octal numbers. Therefore, 0×12 is the same as 18 is the same as 022. The octal notation can be confusing. For example, 08 and 09 are not valid numbers because 8 and 9 are not valid octal digits.

数值一般是十进制数, 除非用了 0x 的前缀表示十六进制数或者用了 0 的前缀来表示八进制数.
因此 0x12 就是 18 (16*1+2), 也是 022 (2*8+2).
八进制表示法是迷惑人的. 例如, 08 和 09 是无效的数, 因为 8 和 9 是无效的八进制数码.
1

评分人数

TOP

下面的形式是错误的:
  1. if a==b
  2.   statement
复制代码
详参见:
mkMSITStore:%windir%\Help\ntcmds.chm::/if.htm
  1. for %%a in (!N1!,!N2!,!N3!,!N4!) do set nb=%%a
复制代码
运行完后, nb 的值是 N4 的值, 也就是说, 对于每一个 M 变量的值, 只会与
N4 进行比较, 所以这里没有实现你期望的逻辑, 另外变量上可以简洁一些:
  1. @echo off&setlocal enabledelayedexpansion
  2. set b=0
  3. for %%a in (!M1!,!M2!,!M3!,!M4!) do (
  4.   for %%b in (!N1!,!N2!,!N3!,!N4!) do (
  5.     if %%a==%%b set /a b+=1
  6.   )
  7. )
复制代码

TOP

返回列表