一个复杂的VBS脚本问题——变量的变量

标签: , , , , ,

如果说之前写的《一个简单的VBS脚本问题——两数相加》没有什么技术含量,那么这个问题就相对比较有技术含量了。一个很久以前别人问的问题:

话说。。有a1、a2、a3…..a100这100个变量,不是数组,有没办法快速把他们加起来。。。
for i=1 to 100 step 1
a=a+a & i
next
我试了不行。。

自己先思考一下怎么做吧,我已经把这100个变量准备好了,点击这里获取。随机生成了100个[1,100]之间的数,所有数的和为5076,看看你算对了吗?

看到这个问题,我最先想到的是PHP,用变量的变量很容易实现:

<?php
/*************************
Author: Demon
Website: http://demon.tw
E-mail: 380401911@qq.com
*************************/
//此处省略100个变量
for($i = 1; $i <= 100; $i++)
{
    $sum = $sum + ${"a$i"};
}
echo $sum;
?>

但是别人问的是VBS,而不是PHP。按照他给出的代码,他也是想用变量的变量来实现,只可惜VBS中没有这种特性。

这个问题我当时想了好久,似乎也只能一个一个变量的加了,于是告诉他,这在VBS中无法实现。但是今天却无意中想到了实现的方法:

'Author: Demon
'Website: http://demon.tw
'E-mail: 380401911@qq.com
'此处省略100个变量
For i = 1 To 100
    str = str & "a" & i & "+"
Next
str = Left(str, Len(str) - 1)
WScript.Echo Eval(str)

使用Eval可以用字符串动态构造出代码,在很多VBS病毒里都能看到Eval的影子,我当时怎么就没想到Eval呢?看来真的是不写病毒好多年。

随机文章:

  1. VBS调用Windows API函数
  2. FireFox(火狐)Cookie修改插件
  3. 没有main函数的C程序
  4. 配置OpenWrt防止3DS自动升级
  5. VBS实现汉字转拼音

10 条评论 发表在“一个复杂的VBS脚本问题——变量的变量”上

  1. PopEye说道:

    看到这题目的第一反应就是使用eval,但是自己没有真正写过eval的代码。今天学习了。“Talk is cheap,show me the code.” 这是真理。

  2. PopEye说道:

    我不会PHP,所以只能反应eval了,嘿嘿。按照你的思路另写了一个VBS,可以自动产生100个随机数,分别以数组方式和Eva方式计算求和。
    Option Explicit
    Dim arrS(99),I,str,intSum1,intSum2
    For I = 0 To 99
    Randomize
    arrS(I) = Int(100 * Rnd + 1)
    Execute(“A” & I & “= arrS(” & I & “)”)
    str = str & Eval(“A” & I) & ” “
    intSum1 = intSum1 + arrS(I)
    intSum2 = intSum2 + Eval(“A” & I)
    Next
    MsgBox str,64,”100个随机数”
    MsgBox intSum1 & vbTab & intSum2,64,”100个随机数求和”

  3. azziporah说道:

    以前搞Batch的时候也遇到过这个问题
    似乎脚本型的语言都有解决办法

    • Demon说道:

      不知BAT如何实现?能否分享一下代码?

      • azziporah说道:

        @echo off
        set FILE_NAME=100.txt
        setlocal EnableDelayedExpansion

        for /f “tokens=1,3” %%i in (%FILE_NAME%) do set %%i=%%j
        for /l %%i in (1,1,100) do set /a amt+=!a%%i!
        echo %amt%
        pause >nul

        REM Batch在每行代码执行前,会对名字进行“扩展“(expansion)
        REM 因而实现这个很方便

  4. 乱码说道:

    ‘此处省略100个变量
    For i = 1 To 100
    sum = Eval(sum & “+a” & i)
    Next
    WScript.Echo sum

    没有Demon大哥,我都不知道VBS有Eval
    才疏学浅真实惭愧…

  5. LinyiSChen说道:

    其实我的第一反应是Execute,
    ‘此处省略100个变量.
    For i=1 To 100
    Execute “sum=sum+a” & i
    Next
    MsgBox sum

留下回复