I was under the impression that the month variable acted as an index into the array. However the White Knight suggested the following snippet for all the index lovers out there:
any attempt to use arrays in batch is a pseudo array. the definition of an array holds that they all have the same name, and are accessed via noncongruous subscripts. In your examples, each variable has a name that is simply formed from the index it refers to, there is no way to reference the array as a whole.
for example, if you were to list environment variables after creating a "array" as you've described it, it will show all the "elements" of the "array".
Although I must contend that it is a good workaround that offers array-like access methods.
A similar thing occured with javascript, java doesn't have intrinsic support for arrays. The original solutions were pretty similar to that which you've created. Anyway, the entire problem dissapeared when JavaScript became an ECMAscript, and the standard (i believe) imposed the creation of an "Array" object.
Arrays are something that can be simulated, but unless the language specification actually mentions it, you can assume that you can't create anything that can be called an array in formal terms. (VB docs mention array a lot... same with C and a lot of other languages (javascript notwithstanding, lol), but the docs for command line extensions and so forth? Don't think so.)
What you've done is analogous to creating a file that contains other files, and calling it a file system. While you can access the files, you cannot do so using standard file system methods, just as you can do array-like things with your creation here, but cannot access it using standard array-access methods as supported by numerous array-featuring languages (javascript notwithstanding).
And finally, I must mention that it is a clever way of adding the ability to work with sets of data, assuming environment space isn't at a premium, of course.