|
|
发表于 2008-9-20 21:44:50
|
显示全部楼层
这种写法有误,你漏掉了set/?中重要的一句话:“。。。这使您可以使用环境变量值做计算而不用键入那些 % 符号来得到它们的值。。。”
不必键入%来闭合变量,是因为在set/a的运算中,如果用到了变量截取,而截取的字符恰好是空值,不会扩展为0,而是空值。
set n=123,给n赋值,三位数--123
set/a zh=%n:~0,1%+%n:~1,1%+%2,1%
会被扩展为set/a zh=1+2+3,这样没错。
但现在的这个题目中,是随机数,未知多少位,如果n的值仍是123,如果写成:
set/a zh=%n:~0,1%+%n:~1,1%+%2,1%+%n:~3,1%
则会扩展为set/a zh=1+2+3+
%n:~3,1% 在此处替换为了空值,空留一个+跟在其后,set/a 中没有这样的用法,所以会提示找不到操作数。
在未知多少位的情况下,可以先用if来判断:
- @echo off&setlocal enabledelayedexpansion
- set h=!random!!random!!random!!random!
- for /l %%a in (0 1 10000) do (
- if "!h:~%%a,1!" neq "" (
- set/a zh+=!h:~%%a,1!
- ) else (
- echo !zh!
- pause&exit/b
- ))
复制代码
以上代码,假设h的值是个小于10000位数的数。
[ 本帖最后由 pusofalse 于 2008-9-20 22:03 编辑 ] |
|