That's not a variable loop. (It's not a smart thing to do, but it's not a variable loop.) It's also not hung, it's chugging along doing what you told it to do. Eventually it will run out of memory and abort the batch file.
The reason it's not treated as a variable loop is because you're prefixing a string (xxx) each time. A variable loop is recognized by the parser when the substitution is identical to the original argument. Even the DWIM parser would have a hard time saving you from yourself with that syntax.